对 Microsoft WebSockets 命名空间感到困惑

Posted

技术标签:

【中文标题】对 Microsoft WebSockets 命名空间感到困惑【英文标题】:Confused by Microsoft WebSockets namespaces 【发布时间】:2011-12-14 02:57:22 【问题描述】:

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

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.WebSocketshtml5labs.interoperabilitybridges.com/...获得。 安装到 [Program Files]\Microsoft SDKs\WCF WebSockets\11.06.22\bin 包含 WebSocketHost、WebSocketService、WebSocketsService 类,以及接口和集合 最后更新时间:2011 年 6 月 22 日

这些有什么不同吗?有一些旧版本吗?

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

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

System.ServiceModel.WebSockets 是 WCF 命名空间的一部分,这似乎也是放置这些东西的明智之选。

帮助 - 我很困惑。我应该使用什么?

【问题讨论】:

Paul Batum 的博客paulbatum.com 介绍了其中一些命名空间,这看起来是迄今为止最好的信息来源。 其中大部分现在与 ASP.NET Web Api (Microsoft.AspNet.WebApi) 无关——它可以像 WCF 一样自托管。它利用 Microsoft.Net.Http 【参考方案1】:

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

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

System.Net.WebSockets - WebSockets 的实现 System.Web.WebSockets - WebSockets 与 ASP.NET 的集成

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

【讨论】:

感谢您确认 Microsoft.* 命名空间。我一定想象过 System.ServiceModel.WebSockets 命名空间。我正在通过一些额外的研究来更新这个问题。 您的回答,加上 Paul Batum 博客已经填写了一些信息。由于似乎没有其他人对这个主题感兴趣,所以答案就交给你了。谢谢 @GregWoods 不,你没想到System.ServiceModel.WebSockets - 我在 2012 年 2 月创建的一个项目中看到它,引用了一个长期离开公司的开发人员机器上的 dll - 现在我得把它建起来……【参考方案2】:

html5labs.interoperabilitybridges.com:

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

System.Web.WebSockets:

...命名空间包含支持将 WebSocket 功能添加到 ASP.NET Web Forms 应用程序的类。

Microsoft.Web.WebSockets:

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


我的结论:

System.Net.WebSockets 似乎是低级的。 System.Web.WebSockets 使用 ASP.NET 时需要 Web 窗体 当您使用 ASP.NET MVC 时,来自 NuGet 的 Microsoft.Web.WebSockets 看起来是最佳选择

【讨论】:

谢谢。我确实最终发现非常有用的 Microsoft.Web.WebSockets 仅适用于 Windows 8。不好意思,它本来对我有用的。 Microsoft.Web.WebSockets 的文档似乎不存在。比如服务器选择协议时如何指定协议? 在我的情况下,SignalR 给了我我需要的一切,所以我停止查找有关 *.WebSockets 程序集/命名空间的信息。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

至于 Microsoft.Web.WebSocketsSystem.Web.WebSockets...

我认为:

System.Web.WebSockets- 为您提供 lower api 用于处理 websockets

同时……

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

【讨论】:

【参考方案5】:

这就是我为什么命名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.WebSocketsSystem.Net.WebSockets 怎么样?

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

嗯...看起来很简单。这些类旨在用于 ASP.NET Web 窗体。他们需要 Windows 8 吗?不确定。

System.Net.WebSockets:是与 Web 表单无关的其他东西。但它只有在您拥有 Windows 8 时才有效。

Microsoft.ServiceModel.WebSockets

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

注意:与其担心使用什么平台+框架来获得 WebSockets 有点消失,你可以只使用 SignalR,它会选择一个传输并尝试为你做一些类似 websockets 的事情。

【讨论】:

以上是关于对 Microsoft WebSockets 命名空间感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

WebSockets 草案的问题

Microsoft Edge Websockets:30 秒后出现“SCRIPT12030”错误

同时使用 HTTP 和 WebSockets 时的 API 命名约定

Azure 认知服务 - 使用 python 和 websockets 自定义语音

理论:Azure Websockets

用于 websockets 内部的 Chrome DevTools 网络工具