1

我遇到了一个奇怪的问题,我可以调用服务器函数,但作为回报,当我尝试调用客户端函数时,它不会调用我做错了什么或错过了一些要完成的代码或配置

我正在使用 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() 
});

我用谷歌搜索发现我们需要在启动我所做的集线器连接之前注册客户端功能,但它仍然无法正常工作,也不会引发任何错误

4

1 回答 1

4

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

改变:

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");
        });
    });
});
于 2013-07-07T18:19:03.293 回答