C# Hubbroxy,长时间不开火
我有一个wpf应用程序,它使用信号器连接。一切正常。但在长时间(例如10小时)hubproxy.on方法未触发后,服务器将数据正确发送到客户端的hubproxy.Invoke也正常工作,只有hubproxy.on不工作。没有连接错误或断开连接状态。它发生在生产环境中 这是我的客户代码C# Hubbroxy,长时间不开火,c#,wpf,signalr,C#,Wpf,Signalr,我有一个wpf应用程序,它使用信号器连接。一切正常。但在长时间(例如10小时)hubproxy.on方法未触发后,服务器将数据正确发送到客户端的hubproxy.Invoke也正常工作,只有hubproxy.on不工作。没有连接错误或断开连接状态。它发生在生产环境中 这是我的客户代码 你能分享一些你试过的代码吗?嗨@awh112。很抱歉我没有及时回复。我用一些代码更新了帖子。假设这个方法(SendMessage)在serverHi上每分钟被调用数百次,我也有类似的问题。我的connection.
你能分享一些你试过的代码吗?嗨@awh112。很抱歉我没有及时回复。我用一些代码更新了帖子。假设这个方法(SendMessage)在serverHi上每分钟被调用数百次,我也有类似的问题。我的connection.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);
}
}