我正在设置一个signalr连接从我的角度前端到一个Asp.Net核心后端。使用fiddler,我在启动连接时会看到多个调用。第一个调用没有完成,这对于我们的e2e测试来说是个问题。
我尝试了set 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 -第一呼叫的原始请求
获取http://localhost:4200/api/notificationHub?id=cm1MjKA22om6orpWoDcO3Q HTTP/1.1主机:本地主机:4200连接:保持活动:文本/事件流缓存-控制:无缓存用户-代理: Mozilla/5.0 (Windows 10.0;Win64;x64) AppleWebKit/537.36 (KHTML,类似壁虎) Chrome/77.0.3865.90 Safari/537.36 Sec-获取模式: cors Sec-获取站点:同源引用:http://localhost:4200/接受-编码: gzip,平减,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-获取模式: cors源:http://localhost:4200 X-Requested With: XMLHttpRequest用户-代理:XMLHttpRequest/5.0 (Windows 10.0;Win64;x64) AppleWebKit/537.36 (XMLHttpRequest/77.0.3865.90 Safari/537.36内容)字符集=UTF-8 Accept: /Sec-Fetch-站点:同源引用:http://localhost:4200/接受-编码: gzip,deflate,br接受-语言: nl,en-US;q=0.9,en;q=0.8,nl-NL;q=0.7
{“协议”:“json”,“版本”:1}
发布于 2019-10-15 17:06:05
我的问题解决了。第一个调用是signalR连接的握手。它在从visual studio运行我的前端和后端时返回101交换协议。(使用ISS Express)
但是当我的后端被国际空间站托管时,它没有返回101。(它没有归还任何东西)
在打开signalR连接上的一些额外日志之后,我发现IIS使用的是websocket,但是IIS没有使用。
为了解决问题,我不得不在IIS中安装websockets。
谢谢你的建议!
https://stackoverflow.com/questions/58320245
复制相似问题