SignalR 2.0 One Connection w / Multiple Pages的问题

时间:2015-01-13 02:42:53

标签: signalr

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

坚持了一段时间,所以任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

在调用$.connection.hub.start()之前,您需要在JavaScript中连接客户端方法。

我还建议将.done().fail()回调挂钩到您对.start()的调用,这样您就可以验证SignalR客户端是否已成功建立连接。

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#establishconnection

当您遇到问题时,在SingalR JS客户端中启用日志记录也很有用:

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#logging