【问题标题】:Why do i see multiple calls in fiddler when starting signalr connection为什么我在启动信号器连接时在提琴手中看到多个调用
【发布时间】:2020-02-07 17:47:37
【问题描述】:

我正在设置从我的角度前端到 Asp.Net Core 后端的信号器连接。 使用提琴手,我在启动连接时看到多个呼叫。第一次调用没有完成,这对我们的 e2e 测试来说是个问题。

我尝试设置 SkipNegotiation: true, transport: SignalR.HttpTransportType.WebSockets 但由于缺少连接 ID,无法再建立连接

this.hubConnection = new signalR.HubConnectionBuilder()                          
        .configureLogging(signalR.LogLevel.Information)
        .withUrl('/api/notificationHub', { 
                  // skipNegotiation: true, transport: 
                     signalR.HttpTransportType.WebSockets
                 }).build();
this.hubConnection.start().then((x) => {
  console.log(x);
  }).catch((x) => {
  console.log(x);
});

我希望所有调用都能完成。 但实际情况是第一次调用没有完成(或者需要很长时间)

GET http://localhost:4200/api/notificationHub?id=BHSyLOnn5BfBbaFYQ7qboQ 

--第一次调用的原始请求

GET http://localhost:4200/api/notificationHub?id=cm1MjKA22om6orpWoDcO3Q HTTP/1.1 主机:本地主机:4200 连接:保持活动 接受:文本/事件流 缓存控制:无缓存 用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 Sec-Fetch-Mode: cors Sec-Fetch-Site:同源 推荐人:http://localhost:4200/ 接受编码:gzip、deflate、br 接受语言:nl,en-US;q=0.9,en;q=0.8,nl-NL;q=0.7

--第二次调用的原始请求

POST http://localhost:4200/api/notificationHub?id=BHSyLOnn5BfBbaFYQ7qboQ HTTP/1.1 主机:本地主机:4200 连接:保持活动 内容长度:32 Sec-Fetch-Mode: cors 来源:http://localhost:4200 X-Requested-With: XMLHttpRequest 用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 内容类型:text/plain;charset=UTF-8 接受:/ Sec-Fetch-Site:同源 推荐人:http://localhost:4200/ 接受编码:gzip、deflate、br 接受语言:nl,en-US;q=0.9,en;q=0.8,nl-NL;q=0.7

{"protocol":"json","version":1}

【问题讨论】:

  • 第一个可能是 OPTION 调用,第二个可能是实际调用。
  • 看起来你是对的,但我仍然不明白为什么它没有给出响应或者对于 OPTION 调用来说这是否正常?
  • 阅读here 以了解更多关于OPTION calls的信息

标签: angular signalr


【解决方案1】:

我的问题解决了。 第一个调用是 signalR 连接的握手。从 Visual Studio 运行我的前端和后端时,它返回了 101 切换协议。 (使用ISS Express)

但是当我的后端托管在 ISS 上时,它没有返回 101。(它没有返回任何内容)

在 signalR 连接上打开一些额外的日志记录后,我发现 IIS Express 正在使用 websocket,但 IIS 没有。

我必须在 IIS 中安装 websockets 才能解决我的问题。

感谢您的建议!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多