我正在尝试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'为空。这几乎是一个新的中心开放。当然,我需要它与我需要关闭连接相同。 我怎么能这样做?
答案 0 :(得分:0)
据我了解,服务器端集线器类没有持久化。因此,myManager对象是使用来自客户端的每个方法调用创建的。我的建议是在你的应用程序的其他地方声明myManager,你可以确保100%的正常运行时间,并让你的服务器端集线器方法以这种方式与它通信。
验证这一点的一种方法是调试集线器类的构造函数。您会注意到每次客户端 - >服务器端方法调用都会调用它。