由Microsoft WebSockets命名空间混淆

时间:2011-10-24 12:50:50

标签: .net wcf html5 websocket

到目前为止,在教程,博客和官方文档中,我看到了:

  • Microsoft.Web.WebSockets
    • 从NuGet获得
    • 程序集是Microsoft.WebSockets,但名称空间是Microsoft.Web.WebSockets
    • 上次更新时间:2011年9月14日
    • 包含WebSocketHandler,WebSocketCollections,WebSocketExtensions
  • System.Web.WebSockets
    • .NET 4.5的一部分,可在Visual Studio 11开发人员预览版中使用
    • 包含AspNetWebSocket,AspNetWebSocketContext,AspNetWebSocketOptions类
    • Documentation on MSDN
  • System.Net.WebSockets
    • 感谢Ladislav Mrnka指出这一点
    • .NET 4.5的一部分,可在Visual Studio 11开发人员预览版中使用
    • 包含WebSocket,HttpListenerWebSocketContext等
    • Documentation on MSDN
  • System.ServiceModel.WebSockets
    • 我一定想到我在某个地方见过这个,现在找不到它
  • Microsoft.ServiceModel.WebSockets
    • html5labs.interoperabilitybridges.com/...获得。
    • 已安装到[Program Files] \ Microsoft SDKs \ WCF WebSockets \ 11.06.22 \ bin
    • 包含WebSocketHost,WebSocketService,WebSocketsService类,以及接口和集合
    • 上次更新时间:2011年6月22日

这些有些不同吗?是一些旧版本吗?

我一直认为“Microsoft.Web”命名空间用于预发布代码,但即使.NET会议中使用.NET. 4.5包含System.Web.WebSockets命名空间,Build会议中的演示也会使用此命名空间内置。

System.Web.WebSockets似乎与Microsoft.Web.WebSockets具有相同的API,但是具有以AspNet为前缀的类和方法。

System.ServiceModel.WebSockets是WCF命名空间的一部分,这也是放置这些内容的合理位置。

帮助 - 我很困惑。我该怎么用?

5 个答案:

答案 0 :(得分:24)

我会为你的困惑添加更多内容。 Microsoft.*前缀程序集/命名空间通常非常特定于某种语言,或者不是.NET框架的一部分(带外(或原型))。

.NET框架附带的程序集/命名空间通常以System.*开头。有两个名称空间包含与.NET 4.5中的WebSockets相关的功能:

  • System.Net.WebSockets - 实施WebSockets
  • System.Web.WebSockets - 将WebSockets与ASP.NET集成

我没有看到System.ServiceModel.WebSockets,但我认为有一些名为Microsoft.ServiceModel.WebSockets

的原型

答案 1 :(得分:4)

html5labs.interoperabilitybridges.com

  

...我们不打算对此原型进行任何更新。

System.Web.WebSockets

  

... namespace包含支持向ASP.NET Web窗体应用程序添加WebSocket功能的类。

Microsoft.Web.WebSockets:

  

...提供了使用ASP.NET和WCF在Windows 8上编写支持WebSocket的服务器应用程序的功能


我的结论:

  • System.Net.WebSockets 似乎是低级别的。
  • 使用ASP.NET Web表单时需要
  • System.Web.WebSockets 使用ASP.NET MVC
  • 时,来自NuGet的
  • Microsoft.Web.WebSockets 看起来是最佳选择

答案 2 :(得分:1)

@Greg Woods re System.ServiceModel.WebSockets:你没想到它。

http://html5labs.interoperabilitybridges.com/media/1165/readme.htm

答案 3 :(得分:1)

至于 Microsoft.Web.WebSockets vs System.Web.WebSockets ...

我认为:

System.Web.WebSockets - 为您提供 更低 api,以便使用websockets

...同时

Microsoft.Web.WebSockets - 是一种 更高 api,这使得它更容易处理,并且还尝试镜像html5 / javascript规范中的事件/函数(例如,onerror,onopen,onmessage,onclose,send等等)

答案 4 :(得分:1)

这是我对为什么命名 Microsoft.Web.WebSockets

的看法

“此预览包提供了使用ASP.NET和WCF在Windows 8上编写支持WebSocket的服务器应用程序的功能。需要.NET 4.5 RC和Windows 8 RC。”

它可能是Microsoft。*命名库,因为它是针对Windows 8 RC开发的。这不是一个坚实的依赖,因此它不能成为官方.net框架的一部分。

当然,一旦Windows 8问世,他们就可以依赖它并开始发布websockets库作为官方框架的一部分。因此,Microsoft.Web.WebSockets可能会被有效地废弃,而不会留下预发布状态。

System.Web.WebSockets vs System.Net.WebSockets 怎么样?

System.Web.WebSockets:“支持向ASP.NET Web窗体应用程序添加WebSocket功能的类。”

嗯...似乎很简单。这些类旨在从ASP.NET Web窗体中使用。他们需要Windows 8吗?不确定。

System.Net.WebSockets:是与Web窗体无关的其他东西。但它只适用于Windows 8。

<强> Microsoft.ServiceModel.WebSockets

另一个旧的预发行包。这个适用于Windows 7!

注意:不要担心在什么平台+框架上使用什么来使WebSockets有点消失,你可以使用SignalR代替,它会选择一个传输并尝试为你做一些像websockets。