我正在使用signalR,2.0专门开发一个应用程序,其中signalR连接是在第一页上创建的。该连接正在整个页面中使用,并在集线器中有多个呼叫。
[HubName("broadcastHub")]
public class BroadcastHub : Hub
{
}
class SignalRHubInterface
{
private static SignalRHubInterface self;
public IHubContext context = GlobalHost.ConnectionManager.GetHubContext<BroadcastHub>();
public static SignalRHubInterface Instance
{
get
{
if (self == null)
{
self = new SignalRHubInterface();
}
return self;
}
}
public void BroadcastListA(List<string> listA)
{
context.Clients.All.listA(listA);
}
public void BroadcastListB(List<string> listB)
{
context.Clients.All.listB(listB);
}
public void BroadcastListC(List<string> listC)
{
context.Clients.All.listC(listC);
}
}
有一个javascript文件包含所有这些功能,以及更多,已加载:
function getPageName() {
var url = window.location.pathname;
var index = url.lastIndexOf("/") + 1;
var filenameWithExtension = url.substr(index);
var filename = filenameWithExtension.split(".")[0];
return filename;
}
$(document).ready(function () {
if (getPageName().toLowerCase() == "pagea") {
loadSignalRMethods();
}
else
if (getPageName().toLowerCase() == "pageb") {
functionabc();
}
}
function loadSignalRMethods() {
var ObjsignalR = $.connection.broadcastHub;
$.connection.hub.start();
ObjsignalR.client.listA= function (listA) {
*...Do something*
};
ObjsignalR.client.listB= function (listB) {
*...Do something*
};
ObjsignalR.client.listC= function (listC) {
*...Do something*
};
}
可以在第一页中调用这些函数,但不能在任何其他页面中调用。尝试在另一个页面中加载signalR函数会导致连接集线器出错。
尝试在第二页上调用signalR函数时,找不到该函数。我相信这可能是后续页面上没有加载函数的问题。
以下单独的类调用函数:
SignalRHubInterface.Instance.BroadcastListA(listA);
坚持了一段时间,所以任何帮助都非常感谢。
答案 0 :(得分:1)
在调用$.connection.hub.start()
之前,您需要在JavaScript中连接客户端方法。
我还建议将.done()
和.fail()
回调挂钩到您对.start()
的调用,这样您就可以验证SignalR客户端是否已成功建立连接。
当您遇到问题时,在SingalR JS客户端中启用日志记录也很有用:
http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#logging