【问题标题】:ASP.NET Core WebSockets on IIS 7.5IIS 7.5 上的 ASP.NET Core WebSockets
【发布时间】: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


    【解决方案1】:

    恐怕你需要 IIS 8

    随着 Windows Server 2012 和 Windows 8 的发布,互联网 Information Services (IIS) 8.0 增加了对 WebSocket 的支持 协议。

    https://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support

    新的 http.sys 可以将常规 HTTP 连接转换为 websocket 的二进制通信。虽然你可以实现你自己的东西,但你不能把它挂在 http.sys 中。

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      相关资源
      最近更新 更多