我有一个在 Windows 上运行的 C# .NET SignalR Hub,我一直在使用 Javascript 客户端对其进行测试。这可行,但我在让等效的 C# 客户端接收消息时遇到问题。
集线器使用 websocket 并拒绝没有 websocket Upgrade 标头的连接。它使用带有自签名证书的 HTTPS。其中一种集线器方法是基本的连接检查,它将简单的文本测试消息回显给客户端,大致类似于 GitHub 上的 ChatHub AspNetCore 演示应用程序。该消息是纯文本而不是 JSON。
Javascript 客户端连接、发送和接收消息正常。无论服务器托管在 Visual Studio 中还是 Windows Server 2019 上的 IIS 中,这都有效。
C#客户端通过HTTPS连接OK(由于是自签名证书,丢弃证书检查),连接状态为Connected。它发送测试消息,可以看到该消息已到达服务器日志,但 C# 客户端未收到回显响应。客户端或服务器端均无例外。看起来好像我输错了方法名称,但我不认为我输错了。
我将粘贴 Javascript Invoke 和 C# InvokeAsync 进行比较。预先感谢任何可以为我指明正确方向的人!
Javascript SignalR 客户端代码 - 按预期工作:
connection.on("TestMessage", function (msg)
{
logMsg("TestMessage: " + msg);
});
C# 等效项。这是在调用 hubConnection.StartAsync() 之前设置的。但是,处理程序永远不会被调用。
this.hubConnection.On<string, string>("TestMessage", (user, message) =>
{
var newMessage = $"{user}: {message}";
this.Log(newMessage);
});
在 Javascript 上,您仅传递单个参数 - 'msg',但在 C# 中,有两个参数 - 'user, message'。