IIS 7.5上的ASP.NET Core WebSockets

问题描述:

我知道只有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使坏

恐怕你需要IIS 8

随着Windows Server 2012和Windows 8的发布,互联网 信息服务(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中。