Можно ли использовать SignalR в Azure для связи между .Net Core и MVC5? - PullRequest
0 голосов
/ 25 октября 2019

У меня создан экземпляр 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 Core

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

, и мне было интересно, если это было причиной, но яЯ не вижу способа изменить имя оператора MVC5, как оно выведено.

Очевидно, что мы будем обновлять приложение MVC5 на каком-то этапе, так что это было бы идеально в промежуточный период.

1 Ответ

1 голос
/ 25 октября 2019

Вы используете два разных типа SignalR здесь. Один - новый для .NET Core, другой - старый SignalR для приложений .NET Framework. Вы можете увидеть различия между ними в этой документации Microsoft.

Поскольку это две разные реализации SignalR, это причина, по которой они не общаются друг с другом. Azure SignalR больше помогает вам масштабировать ваши экземпляры SignalR и не беспокоиться о липких сессиях, конфигурации объединительной платы Redis и других инфраструктурных вещах.

enter image description here

...