Websocket托管在ASPNET Core RC2,IIS" WebSocket连接到' wss:// xxx'失败:WebSocket握手期间出错:意外的响应代码:302

时间:2016-06-29 15:47:55

标签: asp.net websocket asp.net-core asp.net-core-middleware

我在 ASPNET Core RC2 中托管了网络套件服务器。 它在我的本地开发盒上工作正常,只在kestrel上运行时,以及在IIS中托管kestrel时。 当使用谷歌浏览器连接到websocket服务器时,它可以在本地盒子和远程盒子上正常工作:

JavaScript的:

new WebSocket("wss://myServer:8087")

但是,当JavaScript连接到我们的构建计算机( OS:Server 2008 R2 )上托管的同一服务器时,客户端会收到此 302 (重定向)错误:

  

WebSocket连接到' wss:// myBuildServer:8087 /'失败:错误期间   WebSocket握手:意外的响应代码:302

注意:当JavaScript在服务器本身的Chrome上运行时,错误就不同了:

  

WebSocket连接到' wss:// xxx:8087 /'失败:WebSocket开放握手被取消

添加Web套接字的C#源代码(Microsoft.AspNetCore.WebSockets.Server 0.1.0-rc2-final):

private void ConfigureWebSockets(IApplicationBuilder app)
{
    DPT2.Web.Utils.Logger.Log("ConfigureWebSockets()");

    _socketHandler = new Sockets.WebSocketHandler(_nodeServices);

    app.UseWebSockets(new WebSocketOptions{
        //try to fix 302 redirect on build m/c:
        ReplaceFeature = true,
        //TODO tune via these params:
        KeepAliveInterval = TimeSpan.FromMinutes(2),
        ReceiveBufferSize = 4 * 1024
    });
    app.Use(async (http, next) =>
    {
        if (http.WebSockets.IsWebSocketRequest)
        {
            var webSocket = await http.WebSockets.AcceptWebSocketAsync();
            if (webSocket != null && webSocket.State == WebSocketState.Open)
            {
                await _socketHandler.Handle(webSocket);
            }
        }
        else
        {
            // Nothing to do here, pass downstream.
            await next();
        }
    });
}

看起来请求已被损坏'不知何故,这个C#行不会将它识别为Web套接字请求,因此将其传递给MVC:

if (http.WebSockets.IsWebSocketRequest)

版本:

  • 服务器操作系统:Windows 2008 R2

  • IIS 6.1 build 7601 - SP1

  • IIS管理器7.5.7600.16385

  • 安装了ASPNET Core主机:DotNetCore.1.0.0.RC2-WindowsHosting.exe

我尝试了一些解决方法:

  • 使用 http 作为网站,使用 ws:// 作为网络套接字网址

  • 使用 https 作为网站,使用 wss:// 作为网络套接字网址

  • ReplaceFeature 选项添加到websocket服务器

还有其他人看过类似的问题吗?

我认为它与IIS充当了红场的反向代理,也许在那台特定的机器上,代理正在搞乱网络套接字请求......

这可能是服务器上的配置问题......

肖恩

0 个答案:

没有答案