Programovanie

Ako pracovať s webovými zásuvkami v .Net

Webový soket je pripojenie soketu TCP medzi klientom a serverom v sieti. Webová zásuvka je v podstate obojsmerná plne duplexná komunikácia medzi klientom a serverom prostredníctvom siete. Rastúci dopyt po správach s nízkou latenciou v reálnom čase pre webové aplikácie aj pre mobilné aplikácie viedol k nástupu webových zásuviek. Toto je protokol, ktorý vám umožňuje poskytovať rýchlu a obojsmernú komunikáciu vo vašich aplikáciách v reálnom čase, bez potreby kompromisu v oblasti používateľskej skúsenosti.

WebSockets je protokol založený na správach, ktorý využíva výhody prúdového pripojenia TCP. Obor názvov System.Net.WebSockets poskytuje podporu pre prácu s webovými zásuvkami v .Net. Pamätajte, že pripojenie cez web socket medzi serverom a klientskou aplikáciou je nadviazané prostredníctvom výmeny HTTP handshake medzi nimi.

MSDN uvádza: „Webové zásuvky umožňujú prehliadačom otvoriť obojsmerný, plne duplexný komunikačný kanál so službami. Každá strana potom môže tento kanál použiť na okamžité zasielanie údajov druhej strane. Teraz môžu stránky zo sociálnych sietí a hier pre finančné stránky poskytovať lepšie služby. scenáre v reálnom čase, ideálne je použiť rovnaké značky v rôznych prehliadačoch. “

Viac informácií o protokole WebSocket sa dozviete tu.

Práca s webovými zásuvkami v .Net

Pri hostovaní svojich webových zásuviek na strane servera pomocou siete .Net máte niekoľko možností. Server WebSocket môžete hostiť v tradičných aplikáciách ASP.Net alebo ASP.Net MVC. Ak to chcete urobiť, budete musieť využiť výhody HttpContext.AcceptWebSocketRequest. Potom môžete mať na strane klienta webovú aplikáciu na pripojenie k webovej zásuvke a komunikáciu na účely výmeny správ. Môžete tiež vytvoriť službu WCF, ktorá používa netHttpBinding, a využiť CallbackContract vo svojej službe. Potom môžete využiť HttpContext.AcceptWebSocketRequest alebo dokonca využiť WebSocketHandler alebo WebSocketHost dostupné ako súčasť súboru Microsoft.WebSockets.dll.

Na strane klienta môžete na svojej webovej stránke využiť výhody HTML5 a jQuery. Môžete tiež využiť triedu ClientWebSocket na vytvorenie klientskej aplikácie alebo dokonca použiť klienta WCF na pripojenie k webovej zásuvke.

Všimnite si, že objekt HttpContext teraz (od .Net Framework 4.5) obsahuje novú vlastnosť s názvom IsWebSocketRequest. Túto vlastnosť objektu HttpContext môžete využiť na kontrolu, či je prichádzajúca požiadavka požiadavkou webovej zásuvky. Nasledujúci zoznam kódov ukazuje, ako môžete vytvoriť webovú zásuvku pomocou HttpHandler.

služba verejnej triedy: IHttpHandler

   {

public void ProcessRequest (kontext HttpContext)

       {

if (context.IsWebSocketRequest)

context.AcceptWebSocketRequest (ProcessRequestInternal);

inak

context.Response.StatusCode = 400;

       }

public bool IsReusable

       {

dostať

            {

návrat nepravdivý;

           }

       }

súkromná asynchronná úloha ProcessRequestInternal (kontext AspNetWebSocketContext)

       {

Zásuvka WebSocket = kontext.WebSocket;

while (true)

           {

// Sem napíš svoj kód na vybavenie žiadosti

           }

       }

   }

Mali by ste zaregistrovať obslužný program Http v súbore web.config vašej aplikácie. Tu je útržok kódu, ktorý ukazuje, ako by ste to mali urobiť.

  

    

type = "Web.Handler" />

  

Webové zásuvky môžete použiť aj vo svojich radičoch webového rozhrania API. Mimochodom, webové rozhranie API ASP.Net je ľahký rámec používaný na vytváranie služieb RESTful, ktoré bežia na protokole HTTP. Služby RESTful sú ľahké a bezstavové služby založené na klientskych serveroch a cachovateľných službách založené na koncepcii zdrojov. Nasledujúci úryvok kódu ilustruje, ako môžete implementovať webovú zásuvku do svojej metódy radiča webového rozhrania API - všimnite si použitie HttpContext.AcceptWebSocketRequest na prijímanie a nadväzovanie pripojení.

verejná trieda WebSocketController: ApiController

{

[HttpGet]

verejná HttpResponseMessage GetMessage ()

       {

if (HttpContext.Current.IsWebSocketRequest)

           {

HttpContext.Current.AcceptWebSocketRequest (ProcessRequestInternal);

           }

vrátiť nové HttpResponseMessage (HttpStatusCode.SwitchingProtocols);

       }

súkromná asynchronná úloha ProcessRequestInternal (kontext AspNetWebSocketContext)

          {

// Sem napíš svoj kód na vybavenie žiadosti

         }

}

Na strane klienta by ste sa museli pripojiť k webovej zásuvke zadaním URI použitého na odoslanie žiadosti o pripojenie WebSocket.

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

„/ Web / api / WebSocket“);

webSocket.onopen = funkcia () {

$ ("# status"). text ("Pripojené ...");

               };

Môžete tiež využiť výhody novej triedy Microsoft.Web.WebSockets.WebSocketHandler na implementáciu webových zásuviek hneď teraz. Ak chcete používať túto triedu, budete si musieť nainštalovať balík Microsoft.WebSockets prostredníctvom správcu balíkov NuGet. Rovnaký balík môžete tiež nainštalovať spustením nasledujúceho príkazu v konzole Správca balíkov NuGet.

Inštalačný balík Microsoft.WebSockets

Nasledujúci úryvok kódu ukazuje, ako môžete rozšíriť triedu WebSocketHandler a vytvoriť si svoj vlastný obslužný program.

verejná trieda WebSocketHandler: WebSocketHandler

   {

private static WebSocketCollection socketClients = nový WebSocketCollection ();

verejné prepísanie neplatné OnOpen ()

       {

socketClients.Add (this);

socketClients.Broadcast ("Toto je pre všetkých pripojených klientov ...");

this.Send ("Hello from:" + this.WebSocketContext.UserHostAddress);

       }

verejné prepísanie neplatné OnClose ()

       {

base.OnClose ();

       }

public override void OnError ()

       {

base.OnError ();

        }

   }

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