我正在尝试将我的客户端应用程序与服务器上定义的
IHubContext
连接。当我在本地系统中使用 localhost 尝试此操作时,一切正常,如下屏幕截图所示,我可以收到 SignalR
消息。
但是当我在
IIS server
上部署应用程序,然后尝试使用我的客户端连接到该应用程序时,成功连接后,我得到 Handshake cancelled message
。有什么问题吗?
请注意,我已使用
WebSockets
和 Server Manager
在我的服务器上启用了 IIS
。下面是我的客户端代码(在 localhost
上运行得很好。
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("http://localhost:53832/api/[email protected]", {
skipNegotiation: true,
configureLogging: "warn",
withHandshakeResponseTimeout: 3000000,
transport: signalR.HttpTransportType.WebSockets
//,headers : {jwtBearer: tokenValue}
}).configureLogging(signalR.LogLevel.Debug)
.build();
connection.serverTimeoutInMilliseconds = 1000000;
connection.on("NotifyClient", (response) => {
var heading = document.createElement("h3");
heading.textContent = response.useR_NAME;
var p = document.createElement("p");
p.innerText = response.subject;
var div = document.createElement("div");
div.appendChild(heading);
div.appendChild(p); document.getElementById("articleList").appendChild(div);
});
connection.start().catch(function (err) {
return console.error(err.toString());
}).then(function () {
document.getElementById("user").innerHTML = "UserId: " + userId;
connection.invoke("GetConnectionId").then(function (connectionId) {
document.getElementById("signalRConnectionId").innerHTML = connectionId;
})
});
我也在
app.UseWebSockets()
文件的 Configure
方法中设置了 Startup
。
您应该在 .NET Core 中的启动文件中添加此属性:
public void ConfigureServices(IServiceCollection services){
services.AddSignalR(hubOptions => {
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromSeconds(10);
hubOptions.HandshakeTimeout = TimeSpan.FromSeconds(5);
});
}
用管理员打开cmd,然后输入以下命令。
netsh http add urlacl url=http://:<ip_address>:53832/ user="NT AUTHORITY\Authenticated Users