我知道只有Windows 8和更高版本才支持WebSocket。但有时你不能在大型组织中升级系统。所以我尝试在ASP.NET Core应用上实现WebSockets。 我将NuGet包“AspNetCore.WebSockets.Server”作为Windows 7上的自托管应用运行,并且一切正常。但在同一台机器上的IIS7.5上托管不会允许我升级到WebSocket的HTTP连接。即使我尝试模拟握手,IIS简单地删除了我的“Sec-WebSocket-Accept”标题。IIS 7.5上的ASP.NET Core WebSockets
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使坏