Programmering

Sådan arbejder du med websockets i .Net

Et webstik er en TCP-stikforbindelse mellem klienten og serveren via et netværk. I det væsentlige er en websocket en tovejs fuld duplexkommunikation mellem klienten og serveren via et netværk. Den stigende efterspørgsel efter realtid, besked med lav latenstid til både mobile og mobile applikationer har ført til fremkomsten af ​​websockets. Dette er en protokol, der giver dig mulighed for at levere realtid, hurtig og tovejskommunikation i dine applikationer uden behov for at gå på kompromis med brugeroplevelsen.

WebSockets er en beskedbaseret protokol, der udnytter en TCP-streamet forbindelse. System.Net.WebSockets-navneområdet understøtter arbejdet med websockets i .Net. Bemærk, at der oprettes en websocketforbindelse mellem en server og et klientprogram gennem en HTTP-håndtryksudveksling mellem dem.

MSDN siger: "WebSockets gør det muligt for browsere at åbne en tovejskommunikationskanal med fuld duplex med tjenester. Hver side kan derefter bruge denne kanal til straks at sende data til den anden. Nu kan websteder fra socialt netværk og spil til finansielle websteder levere bedre realtidsscenarier, ideelt set ved hjælp af samme markering på tværs af forskellige browsere. "

Du kan lære mere om WebSocket-protokollen her.

Arbejde med WebSockets i .Net

Når du hoster dine websockets på serversiden ved hjælp af .Net, har du et par valg. Du kan være vært for en WebSocket-server i traditionelle ASP.Net- eller ASP.Net MVC-applikationer. For at gøre dette skal du udnytte HttpContext.AcceptWebSocketRequest. Du kan derefter have en webapplikation på klientsiden til at oprette forbindelse til websoklen og kommunikere til udveksling af meddelelser. Du kan også oprette en WCF-tjeneste, der bruger netHttpBinding og drage fordel af en CallbackContract i din tjeneste. Du kan derefter drage fordel af HttpContext.AcceptWebSocketRequest eller endda udnytte WebSocketHandler eller WebSocketHost, der er tilgængelig som en del af Microsoft.WebSockets.dll.

På klientsiden kan du drage fordel af HTML5 og jQuery på din webside. Du kan også udnytte klassen ClientWebSocket til at oprette en klientapplikation eller endda bruge en WCF-klient til at oprette forbindelse til webstikket.

Bemærk, at HttpContext-objektet nu (siden .Net Framework 4.5) indeholder en ny egenskab kaldet IsWebSocketRequest. Du kan drage fordel af denne egenskab af HttpContext-objektet for at kontrollere, om en indgående anmodning er en anmodning om websocket. Følgende kodeliste viser, hvordan du kan oprette en websocket ved hjælp af HttpHandler.

offentlig klasseservice: IHttpHandler

   {

offentlig ugyldig ProcessRequest (HttpContext-kontekst)

       {

if (context.IsWebSocketRequest)

context.AcceptWebSocketRequest (ProcessRequestInternal);

andet

context.Response.StatusCode = 400;

       }

public bool IsReusable

       {

            {

returner falsk;

           }

       }

privat async Task ProcessRequestInternal (AspNetWebSocketContext context)

       {

WebSocket-sokkel = context.WebSocket;

mens (sandt)

           {

// Skriv din kode her for at behandle anmodningen

           }

       }

   }

Du skal registrere Http-handleren i din applikations web.config-fil. Her er kodestykket, der viser, hvordan du skal gøre dette.

  

    

type = "Web.Handler" />

  

Du kan også bruge websockets i dine Web API-controllere. I øvrigt er ASP.Net Web API en let ramme, der bruges til at opbygge RESTful-tjenester, der kører på HTTP. RESTful services er lette, statsløse, klient-serverbaserede, cacheable tjenester, der er baseret på ressourcebegrebet. Følgende kodestykke illustrerer, hvordan du kan implementere en websocket i din Web API-controller-metode - bemærk brugen af ​​HttpContext.AcceptWebSocketRequest til at acceptere og etablere forbindelser.

offentlig klasse WebSocketController: ApiController

{

[HttpGet]

offentlig HttpResponseMessage GetMessage ()

       {

hvis (HttpContext.Current.IsWebSocketRequest)

           {

HttpContext.Current.AcceptWebSocketRequest (ProcessRequestInternal);

           }

returner nye HttpResponseMessage (HttpStatusCode.SwitchingProtocols);

       }

privat async Task ProcessRequestInternal (AspNetWebSocketContext context)

          {

// Skriv din kode her for at behandle anmodningen

         }

}

På klientsiden skal du oprette forbindelse til webstikket ved at angive den URI, der bruges til at sende WebSocket-forbindelsesanmodningen.

var webSocket = ny WebSocket ("ws: //" + window.location.hostname +

"/ Web / api / WebSocket");

webSocket.onopen = funktion () {

$ ("# status"). tekst ("Forbundet ...");

               };

Du kan også drage fordel af den nye klasse Microsoft.Web.WebSockets.WebSocketHandler til at implementere websockets nu. For at bruge denne klasse skal du installere Microsoft.WebSockets-pakken via NuGet Package Manager. Alternativt kan du installere den samme pakke ved at køre følgende kommando i NuGet Package Manager-konsollen.

Installer-pakke Microsoft.WebSockets

Følgende kodestykke viser, hvordan du kan udvide WebSocketHandler-klassen til at oprette din egen brugerdefinerede handler.

offentlig klasse WebSocketHandler: WebSocketHandler

   {

privat statisk WebSocketCollection socketClients = ny WebSocketCollection ();

offentlig tilsidesættelse ugyldigt OnOpen ()

       {

socketClients.Add (dette);

socketClients.Broadcast ("Dette er til alle tilsluttede klienter ...");

this.Send ("Hej fra:" + this.WebSocketContext.UserHostAddress);

       }

offentlig tilsidesættelse ugyldig OnClose ()

       {

base.OnClose ();

       }

offentlig tilsidesættelse ugyldig OnError ()

       {

base.OnError ();

        }

   }

$config[zx-auto] not found$config[zx-overlay] not found