.NET/C# 无需IIS在Windows服务中自托管WebSocket服务咨询
这个问题此前有过公开讨论,但未得出明确结论。
我目前有一个运行多个WCF REST Web服务的自托管Windows服务,想要在其中搭建WebSocket服务器,需求并不复杂,仅需消费传入的数据流。但我无法修改数据的发送方式,协议是固定的,没办法转换为流式HTTP POST请求。
微软官方文档显示WebSocket类从.NET Framework 4.5开始可用,我使用的是受支持的.NET Framework 4.8,但找不到无IIS自托管的相关方案,现有示例大多基于IIS,不符合我的使用场景。
我想确认两点:
- WebSocket类是否可以用来在Windows服务中自托管WebSocket服务器?
- 如果可以,如何实现?希望能提供示例代码。
补充:
我发现这部分内容似乎没有完善的官方文档,但我最终已经实现了功能,关键操作是把地址中的localhost或*替换为+,以下代码可以在不影响现有WCF Web服务运行的前提下托管WebSocket服务:
WebSocketsServer.Start("http://+:80/Socket/");
部分说明可以在HttpListener的相关官方文档中查看,但我还是没搞清楚+和*的适用场景和实际作用差异:
指定端口时,主机元素可以替换为"",表示如果请求的URI没有匹配到其他任何前缀,HttpListener会接收发往该端口的所有请求,例如要接收发往8080端口、且未被其他HttpListener处理的所有请求,前缀为http://:8080/。同理,要指定HttpListener接收发往某端口的所有请求,可以将主机元素替换为"+"字符,例如https://+:8080。"*"和"+"字符可以出现在包含路径的前缀中。
我还是没有完全理解其中的逻辑,有没有相关参考资料可以解释这种配置生效的原因?
内容的提问来源于stack exchange,提问作者www.jensolsson.se

