ASP.NET SignalR är ett bibliotek för ASP.NET utvecklare som förenklar processen att lägga till realtidsfunktionalitet på webben i sina applikationer. En realtidswebfunktion är en funktion där serverkod kan skicka innehåll till en ansluten klient så snart det blir tillgängligt, istället för att servern ska vänta på att klienten ska begära ny data.
ASP .NET SignalR är ett klassbibliotek under ASP .NET, som kan genomföra realtidskommunikation i ASP .NET-webbprojekt (det vill säga att klienten (webbsidan) och serversidan kan meddela varandra i realtid och anropa metoder), SignalR har tre överföringsläge: LongLooping (lång polling), WebSocket (HTML5 WEB-socket), Forever Frame ( långa förfrågningsanslutningar som döljer ramen), kan uttryckligen specificeras i WEB-klienten eller som standard (rekommenderas), om standarden antas,SignalR väljer automatiskt lämplig överföringsmetod baserat på webbläsarens miljö。
Eftersom webbplatsens dataladdning är för långsam är anledningen att datapaketet är för stort, nätverksförfrågan är lämplig, och det visar sig att "ws" är tomt, och sedan visar det sig att SignalR inte använder websocket-protokollet.
När jag felsökte lokalt upptäckte jag att webbplatsen kan använda WS-protokollet normalt, det vill säga den kan kommunicera normalt med websockets och sedan observera skillnaden mellan server- och lokala nätverksförfrågningar, och fann att det är följande:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclehub%22%7D%5D&_=1555578162378
Lokalt:
{"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} Servers:
{"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} Vissa parametrar skiljer sig ursprungligen från de lokala och servermässiga, och jag hittade detTryWebSocketsparameter, lokal är sann, servern är falsk.
När man tittar på informationen visar man att om SignalR använder WebSocket-protokollet måste följande villkor uppfyllas:
- ASP.NET 4.5
- IIS 8.0 (Windows Server 2012 eller Windows 8)
- WebSockets-funktionen är aktiverad på servern
- Stöd för webbläsarens WebSockets
Det vill säga, jag upptäckte att IIS-versionen på servern är 7.5,WebSocket-protokollet stöds inte i IIS 7.5。
Referenslänkar:Inloggningen med hyperlänken är synlig.
|