是否可以在 Azure 上使用 SignalR 在 .Net Core 和 MVC5 之间进行通信?

Is it possible to use SignalR on Azure to communicate between .Net Core and MVC5?

我创建了一个 AzureSignalR 实例和 2 个客户端应用程序。一个是 MVC5、.Net 4.7.2 应用程序,另一个是 .Net Core 2.2。我在两者中都创建了一个相同的 SignalR Hub,就是

    public class MessageHub : Hub
    {
        public void Send(ApplicationEvent evt)
        {
            // broadcastMessage must be a javascript method on the client
            Clients.All.broadcastMessage(evt);
        }
    }

并在两者上实施了必要的 javascript。我遇到的问题是,虽然每个应用程序都可以单独发送和接收消息,但它们不会收到另一个应用程序发出的消息。

我可以看到对 AzureSignalR 服务的请求略有不同,因为 asrs.op 参数中的值不同,即

MVC5

https://<redacted>.service.signalr.net/aspnetclient/negotiate?clientProtocol=2.1&_=1572008814078&asrs_request_id=1tgsLXwGAAA%3D&asrs.op=%2Fsignalr&connectionData=%5B%7B%22name%22%3A%22messagehub%22%7D%5D

.网核

https://<redacted>.service.signalr.net/client/negotiate?hub=messagehub&asrs.op=%2Fmessagehub&asrs_request_id=NmhXZHcGAAA%3D

并想知道这是否是原因,但我看不到更改 MVC5 op 名称的方法,因为它是推断的。

显然,我们将在某个阶段升级 MVC5 应用程序,因此在此期间这将是理想的选择。

您在这里使用了两种不同类型的 SignalR。一个是用于 .NET Core 的新 SignalR,另一个是用于 .NET Framework 应用程序的旧 SignalR。您可以在此 microsoft documentation.

上看到两者之间的差异

由于这是 SignalR 的两个不同实现,这就是它们彼此不通信的原因。 Azure SignalR 更多的是帮助你扩展你的 SignalR 实例,而不用担心粘性会话、Redis 背板配置和其他基础设施。