我知道仅在Windows 8及更高版本上支持WebSockets。但有时你无法在大型组织中升级系统。所以我尝试在ASP.NET Core应用程序上实现WebSockets。 我拿NuGet包" AspNetCore.WebSockets.Server"并在Windows 7上作为自托管应用程序运行,一切正常。但是在同一台机器上托管IIS7.5不会允许我升级到WebSocket的HTTP连接。即使我尝试模拟握手,IIS简单地删除了我的" Sec-WebSocket-Accept"报头中。
static async Task Acceptor(HttpContext hc, Func<Task> next)
{
StringValues secWebSocketKey;
if(hc.Request.Headers.TryGetValue("Sec-WebSocket-Key", out secWebSocketKey))
{
hc.Response.StatusCode = 101;
hc.Response.Headers.Clear();
hc.Response.Headers.Add("Upgrade", new StringValues("websocket"));
hc.Response.Headers.Add("Connection", new StringValues("Upgrade"));
// Disappears on client
hc.Response.Headers.Add("Sec-WebSocket-Accept", new StringValues(GetSecWebSocketAccept(secWebSocketKey[0])));
}
await next();
}
我绝对相信IIS7.5在物理上可以管理WebSockets,如果它们是由开发人员实现的,并且该行为(标题删除)看起来像是来自Microsoft的肮脏技巧
答案 0 :(得分:1)
恐怕你需要IIS 8
随着Windows Server 2012和Windows 8的发布,Internet 信息服务(IIS)8.0增加了对WebSocket的支持 协议
https://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support
新的http.sys可以将常规HTTP连接转换为websockets的二进制通信。虽然你可以实现自己的东西,但你不能把它挂钩到http.sys。