ASP.NET SignalR — это библиотека для ASP.NET разработчиков, которая упрощает процесс добавления веб-функциональности в реальном времени в их приложения. Функция реального времени — это функция, при которой серверный код может отправлять контент подключённому клиенту сразу после его доступности, вместо того чтобы сервер ждал запроса новых данных.
ASP .NET SignalR — это библиотека классов в рамках ASP .NET, которая может реализовывать связь в реальном времени в веб-проектах ASP .NET (то есть клиент (веб-страница) и серверная сторона могут уведомлять друг друга в режиме реального времени и вызывать). SignalR имеет три режима передачи: LongLooping (длинный опрос), WebSocket (HTML5 WEB сокет), Forever Frame ( длинные запросные соединения, скрывающие фрейм), могут быть явно указаны в WEB-клиенте или по умолчанию (рекомендуется), если принят стандартный вариант,SignalR автоматически выберет подходящий способ передачи в зависимости от среды браузера。
Поскольку загрузка данных на сайте слишком медленная, причина в том, что пакет данных слишком большой, сетевой запрос подходит, выясняется, что «ws» пуст, а затем выясняется, что SignalR не использует протокол websocket.
При локальной отладке я обнаружил, что сайт может нормально использовать протокол WS, то есть нормально взаимодействовать с веб-сокетами, а затем наблюдать разницу между серверными и локальными сетевыми запросами, и выяснил, что это следующее:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclehub%22%7D%5D&_=1555578162378
Местные:
{"URL":"/signalr","ConnectionToken":"iX0gmz3XDJpQ62b6eiWK16Quaf+LFlD5aHw1k2oC6dKPz7naDuFmc0M7+xiR72ZjJDuNnMvfZyZF72qJK/4g6FOKAsY5C0uCfViOBXPRJVMBczOXTyCKcztIcugmcBq8" ,"ConnectionId":"50598ad3-b138-458c-a58d-b4f84d23c0e0","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":true," ProtocolVersion":"1.5","TransportConnectTimeout":5.0,"LongPollDelay":0.0} Серверы:
{"URL":"/signalr","ConnectionToken":"4JbNUOp5/ju8Fljn29tCsFoTitZXk3XfF3tkuc/OYpaEQPawJHi3U1nTtjcJJzK4mVsOn9nAEECZj7h5732aV7tNJDgsasCon9uQwhqXZC5EAZPrAgASueApAjBCpPpE" ,"ConnectionId":"c46e67b1-4fb4-4345-983f-bf2c391d33e0","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":false," ProtocolVersion":"1.5","TransportConnectTimeout":5.0,"LongPollDelay":0.0} Некоторые параметры изначально отличались от локальных и серверных, и я их нашёлTryWebSocketsПараметр, локальный — верный, сервер — ложный.
Изучая информацию, выясняется, что если SignalR использует протокол WebSocket, необходимо выполнить следующие условия:
- ASP.NET 4.5
- IIS 8.0 (Windows Server 2012 или Windows 8)
- Функция WebSockets включена на сервере
- Поддержка браузерных WebSockets
Я обнаружил, что версия IIS на сервере — 7.5,Протокол WebSocket не поддерживается в IIS 7.5。
Ссылки на ссылки:Вход по гиперссылке виден.
|