我有一个使用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