使用Edge Chromium和Windows身份验证时,SignalR WebSockets连接失败

时间:2019-08-16 17:03:42

标签: asp.net-core websocket signalr microsoft-edge

我有一个使用SignalR进行某些功能的ASP.NET Core应用程序。在服务器端,集线器的配置如下:

public class MyHub : Hub
{
    // ...
}

Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseStaticFiles();
    app.UseSession();

    app.UseSignalR(c =>
    {
        c.MapHub<MyHub>("/MyHub");
    });
    app.UseMvcWithDefaultRoute();
}

在客户端JavaScript中:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/MyHub")
    .build();

connection.start()
    .then(() => console.log("Connected"));

这在Edge(原始UWP),Chrome和Firefox中运行良好。连接立即开始:

  

[2019-08-16T16:43:05.157Z]信息:将'/ MyHub'标准化为   'http://localhost:50519/MyHub'。 signalr.js(2684,21)

     

[2019-08-16T16:43:05.653Z]信息:WebSocket已连接到   ws:// localhost:50519 / MyHub?id = VT-bp5j-PHa2seOpBAYQzA。 signalr.js   (2684,21)

     

已连接

在新的Edge Dev(基于Chromium)浏览器中,会发生以下情况:

  

[2019-08-16T16:44:30.658Z]信息:将'/ MyHub'标准化为   'http://localhost:50519/MyHub'。 WebSocketTransport.ts:64 WebSocket   连接到'ws:// localhost:50519 / MyHub?id = j9zaJhpUPqB75G8o4n-u9Q'   失败:WebSocket打开握手超时(匿名)@   WebSocketTransport.ts:64 Utils.ts:179

     

[2019-08-16T16:48:30.904Z]错误:无法启动传输   'WebSockets':null ConsoleLogger.log @ Utils.ts:179(匿名)@   HttpConnection.ts:287步骤@ HttpConnection.ts:2(匿名)@   HttpConnection.ts:2被拒绝@ HttpConnection.ts:2 Utils.ts:185

     

[2019-08-16T16:48:30.962Z]信息:SSE已连接至   http://localhost:50519/MyHub?id=OA5D0tqwYF7Nx5AK5kouhA

     

已连接

注意时间戳记。尝试进行WebSockets连接四分钟后,它超时并出错,但随后退回到SSE,通信正常进行。

我知道这是一个预发布的浏览器,但是自从几个月前开始使用它以来,就一直遇到这个问题,并且它没有改变。我还没有找到任何与此相关的已知问题,所以我意识到这可能是我的应用程序遇到的问题。

更新:经过进一步测试,我发现只有在启用 Windows身份验证(并且禁用了匿名身份验证)的情况下,才会发生这种情况。可能与以下内容相关:SignalR not working with Windows-integrated authentication

0 个答案:

没有答案