Programování

Jak pracovat s webovými zásuvkami v .Net

Webový soket je připojení soketu TCP mezi klientem a serverem v síti. V podstatě je webová zásuvka obousměrná plně duplexní komunikace mezi klientem a serverem po síti. Rostoucí poptávka po zprávách s nízkou latencí v reálném čase pro web i mobilní aplikace vedla k nástupu webových soketů. Jedná se o protokol, který vám umožňuje poskytovat rychlou a obousměrnou komunikaci ve vašich aplikacích v reálném čase bez nutnosti kompromisu v uživatelském prostředí.

WebSockets je protokol založený na zprávách, který využívá výhody streamovaného připojení TCP. Obor názvů System.Net.WebSockets poskytuje podporu pro práci s webovými zásuvkami v .Net. Všimněte si, že připojení webové zásuvky mezi serverem a klientskou aplikací je navázáno prostřednictvím výměny handshake HTTP mezi nimi.

MSDN uvádí: „Webové zásuvky umožňují prohlížečům otevřít obousměrný, plně duplexní komunikační kanál se službami. Každá strana pak může tento kanál použít k okamžitému odeslání dat na druhou. Nyní mohou stránky ze sociálních sítí a her na finanční stránky poskytovat lepší scénáře v reálném čase, ideálně s použitím stejného označení napříč různými prohlížeči. “

Další informace o protokolu WebSocket se dozvíte zde.

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

Když hostujete své webové zásuvky na straně serveru pomocí .Net, máte několik možností. Server WebSocket můžete hostovat v tradičních aplikacích ASP.Net nebo ASP.Net MVC. Chcete-li to provést, budete muset využít HttpContext.AcceptWebSocketRequest. Poté můžete mít na straně klienta webovou aplikaci pro připojení k webové zásuvce a komunikaci za účelem výměny zpráv. Můžete také vytvořit službu WCF, která používá netHttpBinding a využít CallbackContract ve vaší službě. Potom můžete využít HttpContext.AcceptWebSocketRequest nebo dokonce využít WebSocketHandler nebo WebSocketHost, které jsou k dispozici jako součást Microsoft.WebSockets.dll.

Na straně klienta můžete na své webové stránce využít výhody HTML5 a jQuery. Můžete také využít třídu ClientWebSocket k vytvoření klientské aplikace nebo dokonce použít klienta WCF k připojení k webové zásuvce.

Všimněte si, že objekt HttpContext nyní (od .NET Framework 4.5) obsahuje novou vlastnost nazvanou IsWebSocketRequest. Tuto vlastnost objektu HttpContext můžete využít ke kontrole, zda je příchozí požadavek požadavkem webové zásuvky. Následující výpis kódu ukazuje, jak můžete vytvořit webovou zásuvku pomocí HttpHandler.

služba veřejné třídy: IHttpHandler

   {

public void ProcessRequest (HttpContext kontext)

       {

if (context.IsWebSocketRequest)

context.AcceptWebSocketRequest (ProcessRequestInternal);

jiný

context.Response.StatusCode = 400;

       }

public bool IsReusable

       {

dostat

            {

návrat false;

           }

       }

soukromá asynchronní úloha ProcessRequestInternal (AspNetWebSocketContext kontext)

       {

Zásuvka WebSocket = context.WebSocket;

while (true)

           {

// Sem napište kód pro zpracování požadavku

           }

       }

   }

Měli byste zaregistrovat obslužnou rutinu Http v souboru web.config vaší aplikace. Tady je fragment kódu, který ukazuje, jak byste to měli udělat.

  

    

type = "Web.Handler" />

  

Ve svých řadičích webového rozhraní API můžete také použít webové zásuvky. Mimochodem, webové rozhraní API ASP.Net je odlehčený rámec používaný pro vytváření služeb RESTful, které běží na HTTP. Služby RESTful jsou lehké, bezstavové, klient-server založené, cachovatelné služby, které jsou založeny na konceptu zdrojů. Následující fragment kódu ukazuje, jak můžete implementovat webovou zásuvku ve vaší metodě řadiče webového rozhraní API - všimněte si použití HttpContext.AcceptWebSocketRequest k přijetí a navázání připojení.

veřejná třída WebSocketController: ApiController

{

[HttpGet]

veřejná HttpResponseMessage GetMessage ()

       {

if (HttpContext.Current.IsWebSocketRequest)

           {

HttpContext.Current.AcceptWebSocketRequest (ProcessRequestInternal);

           }

vrátit nové HttpResponseMessage (HttpStatusCode.SwitchingProtocols);

       }

soukromá asynchronní úloha ProcessRequestInternal (AspNetWebSocketContext kontext)

          {

// Sem napište kód pro zpracování požadavku

         }

}

Na straně klienta byste se museli připojit k webové zásuvce zadáním URI použitého k odeslání požadavku na připojení WebSocket.

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

„/ Web / api / WebSocket“);

webSocket.onopen = funkce () {

$ ("# status"). text ("Připojeno ...");

               };

Můžete také využít nové třídy Microsoft.Web.WebSockets.WebSocketHandler k implementaci webových soketů hned teď. Chcete-li použít tuto třídu, budete muset nainstalovat balíček Microsoft.WebSockets prostřednictvím Správce balíčků NuGet. Alternativně můžete stejný balíček nainstalovat spuštěním následujícího příkazu v konzole Správce balíčků NuGet.

Instalační balíček Microsoft.WebSockets

Následující fragment kódu ukazuje, jak můžete WebSocketHandler třídu rozšířit a vytvořit vlastní vlastní obslužnou rutinu.

veřejná třída WebSocketHandler: WebSocketHandler

   {

soukromý statický WebSocketCollection socketClients = nový WebSocketCollection ();

public override void OnOpen ()

       {

socketClients.Add (this);

socketClients.Broadcast ("Toto je pro všechny připojené klienty ...");

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

       }

public override void OnClose ()

       {

base.OnClose ();

       }

public override void OnError ()

       {

base.OnError ();

        }

   }

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