SignalR和Hub持久性

时间:2013-04-18 01:32:31

标签: signalr signalr-hub

我正在尝试SignalR,我不太明白如何从我的客户端调用方法,它调用同一个集线器。

我的中心有两种方法:

    private ctlDataManager myManager;
    public void StartConnection()
    {
        myManager = new ctlDataManager("test");

        myManager.UpdateItemEvent += myManager_UpdateItemEvent;

        myManager.Connect();
    }

    public void StopConnection()
    {
        myManager.Disconnect();
    }

在我的客户端,我试着像这样打电话给他们:

var notificationHub = $.connection.notificationHub;

    $.connection.hub.start()
        .done(function (state) {
            $("#submit").click(function (e) {
                e.preventDefault();
                notificationHub.server.startConnection();
                return false;
            });

            $("#stop").click(function (e) {
                e.preventDefault();
                notificationHub.server.stopConnection();
                return false;
            });
        });

现在,当我点击开始按钮时,它可以正常启动并接收数据。 但是,当我单击停止按钮时,它会抛出一个对象错误的实例。 似乎'myManager'为空。这几乎是一个新的中心开放。当然,我需要它与我需要关闭连接相同。 我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

据我了解,服务器端集线器类没有持久化。因此,myManager对象是使用来自客户端的每个方法调用创建的。我的建议是在你的应用程序的其他地方声明myManager,你可以确保100%的正常运行时间,并让你的服务器端集线器方法以这种方式与它通信。

验证这一点的一种方法是调试集线器类的构造函数。您会注意到每次客户端 - >服务器端方法调用都会调用它。