ASP.NET SignalR je knjižnica za ASP.NET razvijalce, ki poenostavi postopek dodajanja funkcionalnosti spletnih storitev v realnem času njihovim aplikacijam. Spletna funkcija v realnem času je funkcija, kjer strežniška koda lahko vsebino potisne na povezanega odjemalca takoj, ko postane na voljo, namesto da bi strežnik čakal, da odjemalec zahteva nove podatke.
ASP .NET SignalR je knjižnica razredov pod ASP .NET, ki omogoča komunikacijo v realnem času v spletnih projektih ASP .NET (to pomeni, da se lahko odjemalec (spletna stran) in strežniška stran medsebojno obveščata v realnem času in kličeta). SignalR ima tri načine prenosa: LongLooping (dolgo polling), WebSocket (HTML5 WEB socket), Forever Frame ( dolge povezave zahtev, ki skrijejo okvir), je mogoče eksplicitno določiti v WEB odjemalcu ali privzeto (priporočeno), če je privzeto sprejeto,SignalR bo samodejno izbral ustrezno metodo prenosa glede na okolje brskalnika。
Ker je nalaganje podatkov na spletni strani prepočasno, je razlog v tem, da je podatkovni paket prevelik, omrežni zahtevek je primeren, in ugotovi se, da je "ws" prazen, nato pa se izkaže, da SignalR ne uporablja protokola websocket.
Ko sem lokalno odpravljal napake, sem ugotovil, da spletna stran lahko normalno uporablja protokol WS, torej lahko normalno komunicira z websockets, nato pa opazuje razliko med strežniškimi in lokalnimi omrežnimi zahtevami ter ugotovil, da je naslednja:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclehub%22%7D%5D&_=1555578162378
Lokalno:
{"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} Strežniki:
{"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} Nekateri parametri so sprva drugačni od lokalnih in strežniških, in to sem našelTryWebSocketsparameter, lokalno je resnično, strežnik je napačno.
Ob pregledu informacij ugotovimo, da če SignalR uporablja protokol WebSocket, morajo biti izpolnjeni naslednji pogoji:
- ASP.NET 4.5
- IIS 8.0 (Windows Server 2012 ali Windows 8)
- Funkcija WebSockets je omogočena na strežniku
- Podpora za brskalnik WebSockets
Ugotovil sem, da je IIS različica na strežniku 7.5,Protokol WebSocket ni podprt v IIS 7.5。
Referenčne povezave:Prijava do hiperpovezave je vidna.
|