SignalR C# 客户端无法接收消息,但 Javascript 客户端可以

问题描述 投票:0回答:1

我有一个在 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 c# signalr
1个回答
0
投票

在 Javascript 上,您仅传递单个参数 - 'msg',但在 C# 中,有两个参数 - 'user, message'。

© www.soinside.com 2019 - 2024. All rights reserved.