Using WebSocket in .NET 4.5 (Part 4)
来源:互联网 发布:免费域名加解析 编辑:程序博客网 时间:2024/05/01 01:43
Introduction
Part 1 gives an overview of the WebSocket protocol and .NET WebSocket support. Part 2 demonstrates how to use WebSocket in traditional ASP.NET and MVC 4 web applications. Part 3 demonstrates how to use WCF to host and communicate with WebSocket service, and also gives a solution to use JavaScript WebSocket API to call WebSocket WCF service.
Other than the solutions above, Microsoft has released a utility assembly which helps to use .NET server-side WebSocket APIs like using the event-based JavaScript WebSocket APIs. I will briefly introduce how to use it in this article.
MSWSChat.zip is the sample to host in ASP.NET.
MSWcfWSChat.zip is the sample to host as a WCF Service.
Background
Microsoft.WebSockets.dll was initially released to wrap .NET WebSocket APIs and to help people easily use them. The wrapper makes the communication to event-based. It supports both binary (byte[]) and text messages. Note that the namespace is Microsoft.Web.WebSockets. It is a bit different from the assembly name.
You could download it through NuGet within Visual Studio 2012. Just right-click your project to open the context menu and clickManage NuGet Packages. Then you could search and download theMicrosoft.WebSocketspackage as the following picture indicates:
For more information, please refer to https://nuget.org/packages/Microsoft.WebSockets/0.2.3.
Preparation
To enable WebSocket on the server side, please refer to Part 1.
Host in ASP.NET
To host a WebSocket server in ASP.NET, I first write a class inherited from WebSocketHandler
:
public class MyWSHandler : WebSocketHandler{ public override void OnOpen() { this.Send("Welcom from " + this.WebSocketContext.UserHostAddress); } public override void OnMessage(string message) { string msgBack = string.Format( "You have sent {0} at {1}", message, DateTime.Now.ToLongTimeString()); this.Send(msgBack); } public override void OnClose() { base.OnClose(); } public override void OnError() { base.OnError(); }}
Then I use MyWSHandler
in an custom HTTP handler:
public class MSWSChatHandler : IHttpHandler{ public void ProcessRequest(HttpContext context) { if (context.IsWebSocketRequest || context.IsWebSocketRequestUpgrading) { context.AcceptWebSocketRequest(new MyWSHandler()); } } public bool IsReusable { get { return false; } }}
Don't forget to register the custom HTTP handler in Web.config like what I have done in Part 2.
The code is much simpler and readable than Part 2, right? And for sure, you could use the same way in MVC 4 web applications.
The client-side code is almost the same as Part 2. Please refer to the attachments.
Host as WCF Service
WebSocketHost
is used to host WebSocket server as a WCF service. You could use it in both IIS and a host application. Here I want to host it in IIS, so I write a host factory -MyWebSocketServiceFactory
:
public class MyWebSocketServiceFactory : ServiceHostFactory{ protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) { WebSocketHost host = new WebSocketHost(serviceType, baseAddresses); host.AddWebSocketEndpoint(); return host; }}
is inherited from EchoWSService
WebSocketService
. It implements the communication behaviors:
public class EchoWSService : WebSocketService{ public override void OnOpen() { this.Send("Welcome!"); } public override void OnMessage(string message) { string msgBack = string.Format( "You have sent {0} at {1}", message, DateTime.Now.ToLongTimeString()); this.Send(msgBack); } protected override void OnClose() { base.OnClose(); } protected override void OnError() { base.OnError(); }}
Then I register MyWebSocketServiceFactory as aRouteTable
's entry in Global.asax:
public class Global : System.Web.HttpApplication{ protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.Add(new ServiceRoute( "Echo", new MyWebSocketServiceFactory(), typeof(EchoWSService))); }}
So that a request whose URL is like "ws://localhost/MSWcfWSChat/Echo
" would be treated as a WebSocket connection request.
The only thing we need to do in Web.config is to make sure aspNetCompatibilityEnabled
is set to true:
<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/></system.serviceModel>
The client-side code is almost the same as Part 2 except the URL.
Summary
Microsoft.WebSockets.dll is very easy to use. However, it is not a Microsoft official release. The last update was done in June 2012. I hope it will be supported continuously in future.
Related Links
Using WebSocket in .NET 4.5:
- Part 1: Overview on WebSocket protocol and .NET support
- Part 2: Using WebSocket in Traditional ASP.NET and MVC 4
- Part 3: Using WCF support for WebSocket
- Part 4: Using Microsoft.WebSockets.dll
- Using WebSocket in .NET 4.5 (Part 4)
- Using WebSocket in .NET 4.5 (Part 1)
- Using WebSocket in .NET 4.5 (Part 2)
- Using WebSocket in .NET 4.5 (Part 3)
- In Depth ASP.NET using ADO.NET: Part I
- Generating Koch fractals in AutoCAD using .NET - Part 1
- Generating Koch fractals in AutoCAD using .NET - Part 2
- WebSocket in ASP.NET Core
- WebSocket in ASP.NET Core
- WebSocket In ASP.NET Core
- Using XML in Delphi applications. Part I.
- Using Cookies in ASP.NET
- Remoting in .NET Using C#
- Using Plupload in ASP.NET
- WebSocket In ASP.NET Core(二)
- Using Membership in ASP.Net MVC 4 (转)
- Using Java in scientific research Part one: An introduction
- SCSF - Part 8 Creating and Using Services in the CAB
- 京东苏宁战正酣 搭车营销莫等闲
- 优化值得坚持的地方
- 基本算法
- Hdu 2412 Party at Hali-Bula
- 若何准确的选择优化环节词
- Using WebSocket in .NET 4.5 (Part 4)
- MyEclipse快捷键大全
- 类型“Microsoft.Office.Interop.Word.ApplicationClass”未定义构造函数
- UNIX网络编程——TCP输出,UDP输出
- dedecms的利与弊
- 神经网络常用函数
- hdu1253
- C#操作Word完全方法
- softmax 函数