在Windows 7上运行的.Net 4.5 WebSocket服务器?

29
我知道 .Net 4.5 的 ClientWebSocket 类不支持 Windows 7,但是否可能使用 .Net 4.5 API 在 Windows 7 上创建运行 WebSocket 服务器?更明确地说,根据 这里这里 ,看起来 .Net 4.5 WebSocket 实现的服务器端部分应该即使在 Windows 7 上也是支持的,但运行 HttpListener 并尝试使用开源 WebSocket 实现访问它会导致 "协议不受支持" 错误。

虽然这是一个有趣的问题,但它并没有展示出太多的努力。你尝试过什么?根据MSDN的说法,只支持Windows 8和Server 2012。你需要.NET内置支持吗?否则,有许多第三方库可以满足你的需求。 - CodeCaster
3个回答

36

操作系统级别的HTTP.SYS对WebSockets的支持仅限于Win8 / Windows Server 2012 - 我认为这很傻(它应该是Windows更新的一部分,或者是最多的服务包,在我看来)。

这意味着您不能直接使用HttpListener或ASP.NET的框架支持WebSockets。

但是:至于“是否可能创建WebSocket服务器”-当然...但只有在您自己处理TCP/IP通信或使用第三方库进行通信时才能这样做。 这有点烦人,但并没有听起来那么糟糕。

编辑:经过一些检查,我可以确认此服务器端组件在Windows 7(等等)上不起作用; IsWebSocketRequest返回false,即使它是一个带有Connection: UpgradeUpgrade:websocket(等等)标头的WebSocket请求(来自Chrome会话,因为这有所帮助)。

然而,我感到非常惊讶的是客户端部分不起作用,因为:这更简单,且不需要HTTP.SYS(或者至少不需要HTTP.SYS)。 尝试使用它们会引发PlatformNotSupportedException异常。


1
@sternr 我认为它们不是;我认为它会在运行时出错。更有趣的是:我原本以为 ClientWebSocket 在 Win7 等系统上是受支持的,因为它并不依赖于 HTTP.SYS! - Marc Gravell
1
@sternr对此进行了更多的研究/测试;回答仍然有效。 - Marc Gravell
7
从我的角度来看,这也很奇怪。我对此非常失望,尤其是客户端部分。哎,实际上我对服务器端的部分也感到失望。 - Marc Gravell
2
客户端和服务器端都依赖于一个操作系统级别的组件(websocket.dll),而这个组件只随Windows 8 / Server 2012一同配送。我不确定为什么这个组件不能在较低版本的系统中运行,但这种依赖关系可以解释你所看到的行为。 - Levi
4
是的,说实话,谁认为这是一个真正的技术问题呢。 - Craig Tullis
显示剩余4条评论

7

1

引用自System.Net.WebSockets文档

系统中的一些类在System.Net.WebSockets命名空间上受到支持,包括Windows7、WindowsVista SP2和Windows Server 2008。但是,只有客户端和服务器WebSockets的公共实现支持Windows8和Windows Server 2012。在System.Net.WebSockets命名空间中受到支持的类和类元素是抽象类,在应用程序开发人员可以从这些抽象类继承并扩展实际的客户端WebSockets的实现。

换句话说:需要自己实现客户端WebSocket。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接