c# - Hubproxy.On 长时间不触发
问题描述
我有一个使用 SignalR HubConnection 的 wpf 应用程序。一切都按预期工作。但是在很长一段时间(例如 10 小时)之后 hubproxy.on 方法没有触发,服务器正确地向客户端发送数据也 hubproxy.Invoke 工作正常,只有 hubproxy.On 不起作用。没有连接错误或断开状态。它发生在生产环境中
这是我的客户代码
public partial class MainWindow : Window
{
private IHubProxy hubProxy;
private HubConnection connection;
private string url = "http://localhost:8080/signalr";
public MainWindow()
{
InitializeConnection();
InitializeComponent();
}
private void InitializeConnection()
{
connection = new HubConnection(url);
hubProxy = connection.CreateHubProxy("SignalRHub");
connection.StateChanged += connection_StateChanged;
hubProxy.On<string>("OnMessage", OnMMessage);
connection.Start();
}
void connection_StateChanged(StateChange obj)
{
if (obj.NewState == ConnectionState.Disconnected)
{
InitializeConnection();
}
}
private void OnMMessage(string message)
{
//This not works sometimes
MessageBox.Show(message);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
//this works always, is being logged on the server
hubProxy.Invoke("SendMessage2", new object[1] { "dfdfdf" });
}
}
这是服务器端
public class SignalRHub : Hub
{
public Logger logger = new Logger();
public void Subscribe()
{
SubscriberCache.Subscribers.Add(Context.ConnectionId);
}
public void UnSubscribe()
{
if (SubscriberCache.Subscribers.Contains(Context.ConnectionId))
SubscriberCache.Subscribers.Remove(Context.ConnectionId);
}
public override Task OnDisconnected(bool stopCalled)
{
UnSubscribe();
return base.OnDisconnected(stopCalled);
}
public override Task OnReconnected()
{
if (!SubscriberCache.Subscribers.Contains(Context.ConnectionId))
SubscriberCache.Subscribers.Add(Context.ConnectionId);
return base.OnReconnected();
}
public void SendMessage(string message)
{
//this works always
logger.Info("message sending to client");
Clients.All.OnMessage(message);
}
}
解决方案
推荐阅读
- reactjs - Facebook Pixel content_ids 作为 MongoDb ObjectID 的?
- c++ - 错误:非静态数据成员c ++的无效使用
- pointers - Win32 消息参数的使用是否有约定?
- r - 2x2 矩阵中的 PCA 是否可能取自 3x3 总体协方差矩阵
- javascript - 函数内部的Javascript冒号(:)运算符
- java - 使用 Beacons-Android 库时,Eddystone 信标不起作用
- c++ - Wt 是否泄漏内存?
- c++ - 使用 openCV convertTo 更改图像位深度似乎会“损坏”图像?
- excel - 从关闭的工作簿复制工作表时需要对象错误 424
- cmake - LLVM lib clang CMakeList