IIS 7.5上的ASP.NET核心WebSockets

时间:2016-12-30 22:17:18

标签: iis websocket asp.net-core

我知道仅在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的肮脏技巧

1 个答案:

答案 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。