SignalR,客户端功能未被调用

时间:2013-07-07 12:56:04

标签: signalr client-side

我面临一个奇怪的问题,我能够调用服务器函数但是当我尝试调用客户端函数时,它确实没有调用 我做错了什么或错过了一些代码或配置要完成

我正在使用Visual Studio 2010并开发一个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之前注册客户端函数,但它仍然不起作用,也不会引发任何错误

1 个答案:

答案 0 :(得分:3)

您没有执行客户端功能的原因是因为您的绑定错误。

变化:

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

chat.client.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");
        });
    });
});