Programmering

Hvordan jobbe med Web Sockets i .Net

En webkontakt er en TCP-kontakt mellom klienten og serveren over et nettverk. I hovedsak er en webkontakt en toveis full dupleks kommunikasjon mellom klienten og serveren over et nettverk. Den økende etterspørselen etter sanntid, lav latensmelding for nett, både mobilapplikasjoner har ført til fremkomsten av nettkontakter. Dette er en protokoll som lar deg gi sanntid, rask, toveiskommunikasjon i applikasjonene dine, uten behov for å gå på kompromiss med brukeropplevelsen.

WebSockets er en meldingsbasert protokoll som utnytter en TCP-streamet tilkobling. Systemområdet Net.WebSockets gir støtte for arbeid med webkontakter i .Net. Merk at en nettkontaktforbindelse mellom en server og et klientprogram opprettes gjennom en HTTP-håndtrykkutveksling mellom dem.

MSDN sier: "WebSockets gjør det mulig for nettlesere å åpne en toveis kommunikasjonskanal med full dupleks med tjenester. Hver side kan deretter bruke denne kanalen til å umiddelbart sende data til den andre. Nå kan nettsteder fra sosiale nettverk og spill til økonomiske nettsteder levere bedre sanntidsscenarier, ideelt sett ved å bruke samme markering over forskjellige nettlesere. "

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

Arbeider med WebSockets i .Net

Når du er vert for webkontaktene på serversiden ved hjelp av .Net, har du noen få valg. Du kan være vert for en WebSocket-server i tradisjonelle ASP.Net- eller ASP.Net MVC-applikasjoner. For å gjøre dette må du dra nytte av HttpContext.AcceptWebSocketRequest. Du kan da ha en webapplikasjon på klientsiden for å koble til nettkontakten og kommunisere for utveksling av meldinger. Du kan også opprette en WCF-tjeneste som bruker netHttpBinding og dra nytte av en tilbakeringingskontrakt i tjenesten din. Du kan deretter dra nytte av HttpContext.AcceptWebSocketRequest eller til og med utnytte WebSocketHandler eller WebSocketHost tilgjengelig som en del av Microsoft.WebSockets.dll.

På klientsiden kan du dra nytte av HTML5 og jQuery på websiden din. Du kan også utnytte ClientWebSocket-klassen til å opprette et klientprogram eller til og med bruke en WCF-klient for å koble til nettkontakten.

Merk at HttpContext-objektet nå (siden .Net Framework 4.5) inneholder en ny egenskap som heter IsWebSocketRequest. Du kan dra nytte av denne egenskapen til HttpContext-objektet for å sjekke om en innkommende forespørsel er en forespørsel om websokkel. Følgende kodeliste viser hvordan du kan opprette et webuttak ved hjelp av HttpHandler.

offentlig klasse Service: IHttpHandler

   {

offentlig ugyldig ProcessRequest (HttpContext context)

       {

if (context.IsWebSocketRequest)

context.AcceptWebSocketRequest (ProcessRequestInternal);

ellers

context.Response.StatusCode = 400;

       }

public bool IsReusable

       {

            {

returner falsk;

           }

       }

private async Task ProcessRequestInternal (AspNetWebSocketContext context)

       {

WebSocket-kontakt = context.WebSocket;

mens (sant)

           {

// Skriv koden din her for å behandle forespørselen

           }

       }

   }

Du bør registrere Http-håndtereren i programmets web.config-fil. Her er kodebiten som viser hvordan du skal gjøre dette.

  

    

type = "Web.Handler" />

  

Du kan også bruke webkontakter i Web API-kontrollerne. Forøvrig er ASP.Net Web API et lett rammeverk som brukes til å bygge RESTful-tjenester som kjører på HTTP. RESTful-tjenester er lette, statsløse, klientserverbaserte, cacheable tjenester som er basert på ressursbegrepet. Følgende kodebit illustrerer hvordan du kan implementere en websokkel i din Web API-kontrollermetode - legg merke til bruken av HttpContext.AcceptWebSocketRequest for å godta og etablere tilkoblinger.

offentlig klasse WebSocketController: ApiController

{

[HttpGet]

offentlig HttpResponseMessage GetMessage ()

       {

if (HttpContext.Current.IsWebSocketRequest)

           {

HttpContext.Current.AcceptWebSocketRequest (ProcessRequestInternal);

           }

returner nye HttpResponseMessage (HttpStatusCode.SwitchingProtocols);

       }

private async Task ProcessRequestInternal (AspNetWebSocketContext context)

          {

// Skriv koden din her for å behandle forespørselen

         }

}

På klientsiden må du koble til nettkontakten ved å spesifisere URI som brukes til å sende tilkoblingsforespørselen til WebSocket.

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

"/ Web / api / WebSocket");

webSocket.onopen = funksjon () {

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

               };

Du kan også dra nytte av den nye Microsoft.Web.WebSockets.WebSocketHandler-klassen for å implementere nettkontakter nå. For å bruke denne klassen må du installere Microsoft.WebSockets-pakken via NuGet Package Manager. Alternativt kan du installere den samme pakken ved å kjøre følgende kommando i NuGet Package Manager-konsollen.

Installer-pakke Microsoft.WebSockets

Følgende kodebit viser hvordan du kan utvide WebSocketHandler-klassen til å lage din egen tilpassede behandler.

offentlig klasse WebSocketHandler: WebSocketHandler

   {

privat statisk WebSocketCollection socketClients = ny WebSocketCollection ();

offentlig overstyring ugyldig OnOpen ()

       {

socketClients.Add (dette);

socketClients.Broadcast ("Dette er for alle tilkoblede klienter ...");

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

       }

offentlig overstyring ugyldig OnClose ()

       {

base.OnClose ();

       }

offentlig overstyring ugyldig OnError ()

       {

base.OnError ();

        }

   }