WebSocketはWindows 8以上でのみサポートされていることは知っています。しかし、大規模な組織ではシステムをアップグレードできないことがあります。だから私はASP.NETコアアプリケーションでWebSocketを実装しようとしました。 私はNuGetパッケージ "AspNetCore.WebSockets.Server"を使い、Windows 7上で自己ホスト型のアプリケーションとして動作し、すべて正常に動作します。しかし、同じマシン上のIIS7.5でのホスティングでは、WebSocketへのHTTP接続をアップグレードすることはできません。私がハンドシェイクをシミュレートしようとしても、IISは単純に私の「Sec-WebSocket-Accept」ヘッダーを削除します。彼らは開発者とその行動(ヘッダ除去)によって実装された場合、私は間違いなく確かIIS7.5が物理的にWebSocketを管理することができますIIS 7.5のASP.NETコア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();
}
がマイクロソフトから汚いトリックのように見える