【发布时间】:2016-12-30 22:17:18
【问题描述】:
我知道 WebSocket 仅在 Windows 8 及更高版本上受支持。但有时您无法在大型组织中升级系统。所以我尝试在 ASP.NET Core 应用程序上实现 WebSockets。 我采用 NuGet 包“AspNetCore.WebSockets.Server”并在 Windows 7 上作为自托管应用程序运行,一切正常。但是在同一台机器上的 IIS7.5 上托管不允许我将 HTTP 连接升级到 WebSocket。即使我尝试模拟握手,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();
}
如果 WebSockets 是由开发人员实现的,我绝对肯定 IIS7.5 在物理上可以管理 WebSockets,并且该行为(删除标头)看起来像是 Microsoft 的一个肮脏把戏
【问题讨论】:
标签: iis websocket asp.net-core