Используйте SignalR как концентратор и клиент в двух веб-приложениях ASP.NET Core 2.1 Razor - PullRequest
0 голосов
/ 29 июня 2018

У меня есть 2 веб-приложения ASP.NET Core Razor. Каждое приложение будет использовать SignalR для связи с клиентами веб-приложений и мобильными клиентами. Из-за моего предполагаемого использования я настроил оба веб-приложения как Hub и Client, где Клиент использует .NET SignalR Client. Каждое из 2 веб-приложений имеет следующее:

        static internal HubConnection Connection; // In the Startup class

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;

            Connection = new HubConnectionBuilder()
                 // Where the URL is for the OTHER web app
                .WithUrl("https://localhost:44386/NotificationHub")
                .Build();
        }

В каждом проекте также есть класс NotificationHub, производный от Hub, в папке Hubs.

В методе запуска ConfigureServices в каждом приложении в качестве последнего утверждения используется:

services.AddSignalR();

В методе настройки запуска в каждом приложении непосредственно перед вызовом UseMvc у меня есть следующее:

app.UseSignalR(routes =>
{
    routes.MapHub<NotificationHub>("/NotificationHub");
});

В каждом из классов NotificationHub у меня есть:

    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }

Итак, я не уверен, как изначально подключиться с одного клиента к концентратору, и я также не уверен, правильно ли я использую URL.

1 Ответ

0 голосов
/ 29 июня 2018

Для использования js Client:

1) Установить сигнализатор npm: npm install @aspnet/signalr

2) Добавить ссылку на нужную страницу

3) Добавить код объекта подключения

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/NotificationHub")
    .configureLogging(signalR.LogLevel.Information)
    .build();
connection.start().catch(err => console.error(err.toString()));

4) Вызовите требуемый метод

connection.invoke("SendMessage", user, message).catch(err => console.error(err.toString()));

Для .Net Client

1) установить nuget: Install-Package Microsoft.AspNetCore.SignalR.Client

2)

 HubConnection connection  = new HubConnectionBuilder()
            .WithUrl("https://localhost:44386/NotificationHub")
            .Build();     

 await connection.StartAsync();

 await connection.InvokeAsync("SendMessage", 
                    "user", "message");

вы можете установить соединение нажатием кнопки или отправкой сообщения

Более подробную информацию вы можете найти по ссылке ниже:

https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction?view=aspnetcore-2.1

...