我面临一个奇怪的问题,我能够调用服务器函数但是当我尝试调用客户端函数时,它确实没有调用 我做错了什么或错过了一些代码或配置要完成
我正在使用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之前注册客户端函数,但它仍然不起作用,也不会引发任何错误
答案 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");
});
});
});