Kako raditi s web utičnicama u .Netu

Web utičnica je veza TCP utičnice između klijenta i poslužitelja putem mreže. U osnovi, web utičnica je dvosmjerna full duplex komunikacija između klijenta i poslužitelja putem mreže. Sve veća potražnja za stvarnim vremenom, slanje poruka s latencijom za web, podjednako za mobilne aplikacije dovela je do pojave web utičnica. Ovo je protokol koji vam omogućuje brzu, dvosmjernu komunikaciju u stvarnom vremenu u vašim aplikacijama, bez potrebe za ugrožavanjem korisničkog iskustva.

WebSockets je protokol zasnovan na porukama koji koristi prednost protokola TCP veze. Prostor imena System.Net.WebSockets pruža podršku za rad s web utičnicama u .Net. Imajte na umu da se veza web poslužitelja između poslužitelja i klijentske aplikacije uspostavlja putem HTTP razmjene rukovanja između njih.

MSDN navodi: "WebSockets omogućuju preglednicima otvaranje dvosmjernog, full-duplex komunikacijskog kanala sa uslugama. Svaka strana tada može koristiti ovaj kanal za trenutno slanje podataka drugoj. Sada web mjesta od društvenih mreža i igara do financijskih stranica mogu bolje isporučiti scenariji u stvarnom vremenu, idealno koristeći iste oznake u različitim preglednicima. "

Ovdje možete saznati više o protokolu WebSocket.

Rad s WebSockets u .Net

Kada hostirate svoje web utičnice na strani poslužitelja pomoću .Net-a, imate nekoliko izbora. Možete poslužiti WebSocket poslužitelj u tradicionalnim ASP.Net ili ASP.Net MVC aplikacijama. Da biste to učinili, trebali biste iskoristiti prednost HttpContext.AcceptWebSocketRequest. Tada na klijentskoj strani možete imati web aplikaciju za povezivanje s web utičnicom i komunikaciju radi razmjene poruka. Također možete stvoriti WCF uslugu koja koristi netHttpBinding i iskoristiti CallbackContract u svojoj usluzi. Tada možete iskoristiti prednosti HttpContext.AcceptWebSocketRequest ili čak iskoristiti WebSocketHandler ili WebSocketHost koji su dostupni kao dio Microsoft.WebSockets.dll.

Na klijentskoj strani možete iskoristiti HTML5 i jQuery na svojoj web stranici. Također možete iskoristiti klasu ClientWebSocket za stvaranje klijentske aplikacije ili čak koristiti WCF klijent za povezivanje s web utičnicom.

Imajte na umu da objekt HttpContext sada (od .Net Framework 4.5) sadrži novo svojstvo zvano IsWebSocketRequest. Možete iskoristiti ovo svojstvo objekta HttpContext da biste provjerili je li dolazni zahtjev zahtjev web utičnice. Sljedeći popis kodova pokazuje kako možete stvoriti web utičnicu pomoću HttpHandlera.

public class Service : IHttpHandler

   {

       public void ProcessRequest(HttpContext context)

       {

           if (context.IsWebSocketRequest)

               context.AcceptWebSocketRequest(ProcessRequestInternal);

           else

               context.Response.StatusCode = 400;

       }

       public bool IsReusable

       {

           get

            {

               return false;

           }

       }

       private async Task ProcessRequestInternal(AspNetWebSocketContext context)

       {

           WebSocket socket = context.WebSocket;

             while(true)

           {

               //Write your code here to process the request

           }

       }

   }

Trebali biste registrirati Http rukovatelj u datoteci web.config vaše aplikacije. Evo isječka koda koji pokazuje kako biste to trebali učiniti.

  

    

           type="Web.Handler"/>

  

You can also use web sockets in your Web API controllers. Incidentally, ASP.Net Web API is a lightweight framework used for building RESTful services that run on HTTP. RESTful services are light-weight, stateless, client-server based, cacheable services that are based on the concept of resources. The following code snippet illustrates how you can implement a web socket in your Web API controller method -- note the usage of HttpContext.AcceptWebSocketRequest to accept and establish connections.

public class WebSocketController : ApiController

{

       [HttpGet]

       public HttpResponseMessage GetMessage()

       {

           if (HttpContext.Current.IsWebSocketRequest)

           {

               HttpContext.Current.AcceptWebSocketRequest(ProcessRequestInternal);

           }

           return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);

       }

          private async Task ProcessRequestInternal(AspNetWebSocketContext context)

          {

          //Write your code here to process the request

         }

}

At the client side, you would need to connect to the web socket by specifying the URI used to send the WebSocket connection request.

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

                   "/Web/api/WebSocket");

                   webSocket.onopen = function () {

                   $("#status").text("Connected...");

               };

You can also take advantage of the new Microsoft.Web.WebSockets.WebSocketHandler class to implement web sockets now. To use this class, you would need to install the Microsoft.WebSockets package via NuGet Package Manager. Alternatively, you can install the same package by running the following command in the NuGet Package Manager Console.

Install-Package Microsoft.WebSockets

The following code snippet shows how you can extend the WebSocketHandler class to create your own custom handler.

public class WebSocketHandler : WebSocketHandler

   {

       private static WebSocketCollection socketClients = new WebSocketCollection();

       public override void OnOpen()

       {

           socketClients.Add(this);

           socketClients.Broadcast("This is for all connected clients...");

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

       }

       public override void OnClose()

       {

           base.OnClose();

       }

       public override void OnError()

       {

           base.OnError();

        }

   }