2013-04-02 3 views
2

Вот как выглядит наша установка, как:SignalR .NET время Клиента из

  • SignalR сервер (приложение ASP.NET MVC) на Windows Server 2012.
  • Сенч HTML5 приложений (клиенты SignalR) на тот же сервер (Windows Server 2012).
  • Служба Windows .NET на сервере Windows Server 2008 R2. Это также действует как клиент SignalR.

Мы используем конструкцию разработки SignalR от пары недель назад (1.1.0). Иногда мы обнаруживаем, что сервер SignalR теряет соединение с клиентом .NET. Использование последней сборки позволило нам добавить журналирование на стороне клиента.

У нас есть хороший пример этого события в прошлый четверг (28 марта 2013 года, 6:30).

Журнал на стороне клиента (для краткости я удалил все журналы, которые не важны). Обратите внимание, что класс Hub называется «передатчик».

ChangeState(New connection, Disconnected, Connecting) 
WS: wss://www.myURL.com/SignalRServer/signalr/connect?transport=webSockets&connectionToken=fsfY8BWv5eiSNuQtHW6wfY6XWDInkrVEn5fyHogSIyapob1BxoZLz0aMO_IuARmd9suam3my3yU0sQOEYMah-ZVj_4idQHXKQmhUKyRFlNgObCWlblCDfXflOq4Fxt8P0&connectionData=[{"Name":"Transmitter"}] 
Auto: Failed to connect to using transport webSockets. System.PlatformNotSupportedException: The WebSocket protocol is not supported on this platform. 
    at System.Net.WebSockets.ClientWebSocket..ctor() 
    at Microsoft.AspNet.SignalR.Client.Transports.WebSocketTransport.<PerformConnect>d__0.MoveNext() 
SSE: GET https://www.myURL.com/SignalRServer/signalr/connect?transport=serverSentEvents&connectionToken=fsfY8BWv5eiSNuQtHW6wfY6XWDInkrVEn5fyHogSIyapob1BxoZLz0aMO_IuARmd9suam3my3yU0sQOEYMah-ZVj_4idQHXKQmhUKyRFlNgObCWlblCDfXflOq4Fxt8P0&connectionData=[{"Name":"Transmitter"}] 
ChangeState(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Connecting, Connected) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: initialized) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {"C":"B,25|1,0|2,0|3,0","M":[{"H":"Transmitter","M":"joined","A":["0e3cd780-9efc-4824-b9a2-bae81b9be17f","27/03/2013 8:16:46 PM"]}]}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {"C":"B,25|1,1|2,0|3,0","M":[{"H":"Transmitter","M":"isLoggedIn","A":[true]}]}) 
OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, {"I":"0"}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
............ 
............ 
............ 
............ 
............ 
............ 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
Connection Timed-out : Transport Lost Connection 28/03/2013 8:33:14 AM 
ChangeState(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Connected, Reconnecting) 
SSE: GET https://www.myURL.com/SignalRServer/signalr/?transport=serverSentEvents&connectionToken=fsfY8BWv5eiSNuQtHW6wfY6XWDInkrVEn5fyHogSIyapob1BxoZLz0aMO_IuARmd9suam3my3yU0sQOEYMah-ZVj_4idQHXKQmhUKyRFlNgObCWlblCDfXflOq4Fxt8P0&messageId=B%2C6&connectionData=[{"Name":"Transmitter"}] 
ChangeState(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Reconnecting, Connected) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: initialized) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {"C":"B,7","M":[{"H":"Transmitter","M":"rejoined","A":["0e3cd780-9efc-4824-b9a2-bae81b9be17f","28/03/2013 6:33:12 PM"]}]}) 
OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, {"I":"12"}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
............ 
............ 

До истечения времени соединения все работает должным образом - сервер SignalR может вызывать методы .NET-клиента и наоборот. После истечения времени подключения клиент .NET может вызывать методы сервера-концентратора, но сервер не может вызывать методы .NET-клиента.

Другие вещи, чтобы отметить:

  • Обратите внимание, что время соединения из отчетности "28/03/2013 8:33:14 AM", как время. Это отличается от времени, зарегистрированного в последующих записях, и время было фактически 6:33:14 PM (австралийский EST).
  • Как видно выше, ServerSentEvents используется в качестве клиента SignalR .NET на сервере Windows 2008.
  • Не существует шаблона таймаута. Иногда это не происходит в течение нескольких дней, иногда это происходит через несколько часов.
  • Тайм-аут не относится к машинам (как, где сервер SignalR или клиент SignalR проживают) перезагружается, IIS сбросы и т.д.

Кроме того, это совершенно отличается от кратковременных потерь соединения и повторные соединения, которые, как представляется, работают по мере необходимости. Пример мгновенной потери в связи показано ниже:

SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
ChangeState(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Connected, Reconnecting) 
SSE: GET https://www.myURL.com/SignalRServer/signalr/?transport=serverSentEvents&connectionToken=fsfY8BWv5eiSNuQtHW6wfY6XWDInkrVEn5fyHogSIyapob1BxoZLz0aMO_IuARmd9suam3my3yU0sQOEYMah-ZVj_4idQHXKQmhUKyRFlNgObCWlblCDfXflOq4Fxt8P0&messageId=B%2C1D%7CF%2CE%7CG%2C0%7CH%2C0&connectionData=[{"Name":"Transmitter"}] 
ChangeState(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Reconnecting, Connected) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {"C":"B,2","M":[{"H":"Transmitter","M":"rejoined","A":["00fabf13-eb07-4704-8d43-4d8865a519f0","28/03/2013 4:08:26 PM"]}]}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: initialized) 
OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, {"I":"11"}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 
SSE: OnMessage(0e3cd780-9efc-4824-b9a2-bae81b9be17f, Data: {}) 

То, что я не понимаю, почему кратковременные потери связи и пересоединение, кажется, работают, но пересоединение после подключения тайм-аут не Работа.

Есть ли что-нибудь, что мы можем сделать, чтобы решить эту проблему?

Заранее спасибо.

ответ

1

Когда событие Disconnected клиента поднято, это означает, что соединение было удалено сервером. После этого разработчик должен перезапустить соединение.

Мы делаем это потому, что сохранение состояния на сервере в течение длительного времени является дорогостоящим.