Hubproxy.Не стреляй через долгое время - PullRequest
0 голосов
/ 31 мая 2018

У меня есть приложение wpf, которое использует SignalR HubConnection.все работает как положено.Но после долгого времени (например, 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);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...