首页 > 解决方案 > 是否可以在 Azure 上使用 SignalR 在 .Net Core 和 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

.Net 核心

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

并想知道这是否是原因,但我看不到一种方法来更改推断的 MVC5 操作名称。

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

标签: signalrsignalr-hubasp.net-core-signalrazure-signalr

解决方案


您在这里使用两种不同类型的 SignalR。一个是用于 .NET Core 的新版本,另一个是用于 .NET Framework 应用程序的旧 SignalR。您可以在此microsoft 文档中查看两者之间的差异。

由于这是 SignalR 的两种不同实现,这就是它们不相互通信的原因。Azure SignalR 更多地用于帮助您扩展 SignalR 实例,而无需担心粘滞会话、Redis 背板配置和其他基础设施。

在此处输入图像描述


推荐阅读