Signalr 信号器,客户端函数未被调用

Signalr 信号器,客户端函数未被调用,signalr,client-side,Signalr,Client Side,我面临着一个奇怪的问题,我可以调用服务器函数,但作为回报,当我尝试调用客户机函数时,它不会调用 我是做错了什么,还是遗漏了一些需要完成的代码或配置 我正在使用VisualStudio2010开发一个web应用程序 服务器代码只是一个简单的类 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.AspNet.SignalR; namespace S

我面临着一个奇怪的问题,我可以调用服务器函数,但作为回报,当我尝试调用客户机函数时,它不会调用 我是做错了什么,还是遗漏了一些需要完成的代码或配置

我正在使用VisualStudio2010开发一个web应用程序

服务器代码只是一个简单的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;

namespace SignalRDemo
{
    public class MyHub:Hub 
    {
        public void GetMessage(string msg)
        {

             Clients.All.getMsg1("Got :"+msg);

        }

    }
}`
在全球asax中,我有

protected void Application_Start(object sender, EventArgs e)
{
    RouteTable.Routes.MapHubs();
}
客户端代码我只需单击btn,它会按预期调用服务器函数GetMessage,但作为回报,它不会调用getMsg1

$(document).ready(function () {
    debugger;
    var chat = $.connection.myHub;
    chat.getMsg1 = function (msg) {
        debugger;
        alert(msg);
    };
    $("#btn").click(function () {
        chat.server.getMessage("called");
    });

    $.connection.hub.start() 
});

我在谷歌上搜索了一下,发现我们需要在启动hub conn之前注册客户端函数,我这样做了,但它仍然不起作用,也不会引发任何错误。没有执行客户端函数的原因是绑定错误

更改:

chat.getMsg1 = function (msg) {
    debugger;
    alert(msg);
};

另一个值得注意的是,作为一种良好实践,您应该始终在连接完全启动时绑定事件处理程序。因此,您可以按如下方式编写客户端代码:

$(document).ready(function () {
    debugger;
    var chat = $.connection.myHub;

    chat.client.getMsg1 = function (msg) {
        debugger;
        alert(msg);
    };  

    $.connection.hub.start().done(function() {
        $("#btn").click(function () {
            chat.server.getMessage("called");
        });
    });
});

没有执行客户端函数的原因是绑定错误

更改:

chat.getMsg1 = function (msg) {
    debugger;
    alert(msg);
};

另一个值得注意的是,作为一种良好实践,您应该始终在连接完全启动时绑定事件处理程序。因此,您可以按如下方式编写客户端代码:

$(document).ready(function () {
    debugger;
    var chat = $.connection.myHub;

    chat.client.getMsg1 = function (msg) {
        debugger;
        alert(msg);
    };  

    $.connection.hub.start().done(function() {
        $("#btn").click(function () {
            chat.server.getMessage("called");
        });
    });
});

谢谢你,伙计,救了我一天!+我还有一个问题。我可以调用的服务器功能的数量是否有任何限制,因为我多次点击btn当然有点快,客户端功能没有超过这个时间(基本上比率是5/10),但有一点我注意到,使用Google Chrome我没有问题,但使用IE8我有问题。这是由于IE8中对同时调用ajax的次数的限制。IE8不应该把ajax调用排队吗?你能帮我提供一些适合1.1.2的好链接吗?我搜索了一点,但找不到信号机1.1.2信号机的下降链接,找到了信号机的最佳资源。至于你的问题,如果你碰巧在IE8的飞行中超过了最多6个ajax调用,你绝对不会得到所有发送到服务器的消息。但是,对于服务器上触发的每个方法,您都应该让所有响应最终到达客户端。谢谢,伙计,救了我一天!+我还有一个问题。我可以调用的服务器功能的数量是否有任何限制,因为我多次点击btn当然有点快,客户端功能没有超过这个时间(基本上比率是5/10),但有一点我注意到,使用Google Chrome我没有问题,但使用IE8我有问题。这是由于IE8中对同时调用ajax的次数的限制。IE8不应该把ajax调用排队吗?你能帮我提供一些适合1.1.2的好链接吗?我在谷歌上搜索了一下,但没有找到信号机1.1.2的下降链接信号机的最佳资源在。至于你的问题,如果你碰巧在IE8的飞行中超过了最多6个ajax调用,你绝对不会得到所有发送到服务器的消息。但是,对于服务器上触发的每个方法,您应该让所有响应最终到达客户端。