0

我正在尝试 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' 似乎为空。这几乎就像一个新的枢纽开放了。当然,我需要它与我需要关闭连接的相同。我怎样才能做到这一点?

4

1 回答 1

0

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

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

于 2013-05-12T19:30:12.803 回答