我使用SignalR并拥有一个Hub,我已经覆盖了OnConnected方法。原因是,服务器每60秒发布一次数据。但是当新客户端连接时,我想立即发布数据。
以简化形式:
public class CustomerPublisher : Hub
{
public void Publish(Customer customer)
{
Clients.All.receive(customer);
}
public override Task OnConnected()
{
return base.OnConnected();
}
}
永远不会调用OnConnected方法(我通过调试测试)。我在几个地方(如here)读过客户端需要连接的处理程序,例如:
$.connection.onlineHub.client.connected = function(){...}
但是,我有一个WPF客户端,所以在.NET中我尝试添加这个,在我已经处理的事件之上:
hubProxy.On<object>("receive", OnCustomerReceived); // this line was already present
hubProxy.On<object>("connected", OnConnected); // I added this
这没有任何帮助。但我确实有联系,因为一段时间后,我开始接收数据。
我有什么遗失的吗?当我的.NET客户端连接时,如何让SignalR调用OnConnected方法?
答案 0 :(得分:1)
您可以尝试使用StateChanged
这样的事件:
Connection.StateChanged += Connection_StateChanged;
void Connection_StateChanged(StateChange obj)
{
if (obj.NewState == ConnectionState.Connected)
{
//do somethign here
}
}
您将收到Connecting
和Connected
个州
答案 1 :(得分:1)
就我而言,问题是Autofac。我以自己的方式设置它(由于我在使用SignalR之前设置了WCF双工的方式)。但遵循the docs非常重要。即使建立了连接,并且我的客户端收到了数据,我也从未输入OnConnected
方法。按照文档后,我调用了该方法。