Не удалось подключиться к Azure SignalR Hub - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь отправлять сообщения в режиме реального времени в Azure SignalR Hub. Но я не смог подключиться к самому своему Azure SignalR Hub. Я пробовал разные решения. Это не сработало, как ожидалось. Не могли бы вы помочь мне здесь? Нет документации для этой версии SignalR Client.

public static async Task BroadcastMessageAsync()
{
    var signalrUrl = "https://myazuresignalr.service.signalr.net";
    var hubConnection = new HubConnection(signalrUrl);
    hubConnection.Credentials = CredentialCache.DefaultNetworkCredentials;
    hubConnection.Closed += async () =>
    {
        await hubConnection.Start();
    };

    var hubProxy = hubConnection.CreateHubProxy("chat");

    hubProxy.On<string, string>("ReceiveMessage", (user, message) =>
    {
        Console.WriteLine(user + " | " + message);
    });

    try
    {
        await hubConnection.Start();
        Console.WriteLine("Connection started");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }

    await hubProxy.Invoke("SendMessage", "user", "message").ConfigureAwait(false);
}

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Похоже, в конце концов, HubConnection от Microsoft.AspNetCore.SignalR.Client предназначен для подключения к SignalR Hub, управляемому на промежуточном программном обеспечении, таком как Asp.Net Web App \ Api. Он не предназначен для подключения к прямой конечной точке службы Azure SignalR.

Неправильно:

var signalrUrl = "https://myazuresignalr.service.signalr.net";

Правильно: Для клиента чата

var signalrUrl = "https://myazuresignalr.service.signalr.net/client/?hub=yourHubName";

Правильно: Для сервера чата

var signalrUrl = "https://myazuresignalr.service.signalr.net/api/v1/hubs/yourHubName

Теперь я могу подключиться к службе Azure SignalR из веб-приложения Asp.Net, используя его ключ доступа. Asp.Net Web App создает и размещает концентратор через службу Azure SignalR. Из консольного приложения c # я подключаюсь к приложению Asp.Net для связи со службой Azure SignalR.

На поверхности службы Azure SignalR нет четкой документации, подтверждающей, что клиентская библиотека использует REST API-версию SignalR.

Надеюсь, что это может помочь и помочь кому-то еще!

Подводя итог,

  1. Должен ли я всегда реализовывать промежуточное программное обеспечение, такое как веб-приложение Asp.Net, и полагаться на него для создания и общения через Hub? Разве нельзя напрямую общаться со службой Azure SignalR из консоли c # для создания концентратора и отправки моих сообщений через концентратор?

    [OP]: нет, не всегда. Есть и другое решение, кроме того, что я написал выше. Это руководство помогает мне общаться со службой Azure SignalR напрямую через REST API.

- ОБНОВЛЕНИЕ -

  1. Создайте центральный концентратор для службы сигналов Azure, используя любой серверный язык ( Я выбрал Asp.Net Web API ). Рекомендуется иметь посредника, такого как Web API, для авторизации клиентских запросов перед отправкой в ​​службу Azure SignalR. Кроме того, для маскировки строки подключения Azure SignalR от клиентов.

  2. Создание клиентского приложения ( Получатель сообщений, чаще всего ) с помощью библиотеки HubConnectionBuilder с использованием любых клиентских языков, отличающихся от JS, TS, .Net Console, ..

  3. Создайте приложение вещателя сообщений с помощью строки подключения Azure SignalR для отправки сигналов через службу Azure SignalR.

  4. Сервер может публиковать любые новые сигнальные события через концентратор, в то время как клиент может прослушивать эти динамические события при условии, что клиент подписан на эти динамические события.

  5. Клиент может отправлять сигналы только через Web API Central Hub, когда Web API реализует это событие.

1 голос
/ 03 апреля 2019

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.signalr.client.hubconnection?view=aspnetcore-2.2

Замечания HubConnection должен быть создан с использованием HubConnectionBuilder. Перед вызовом методов-концентраторов соединение должно быть запущено с использованием StartAsync (CancellationToken). Очистить соединение с помощью StopAsync (CancellationToken) или DisposeAsync ().

образец

HubConnection _connection = new HubConnectionBuilder()
                .WithUrl(url, option =>
                {
                    option.AccessTokenProvider = () =>
                    {
                        return Task.FromResult(//// Access Token ///);
                    };
                }).Build();

Посмотрите на эти образцы

https://github.com/aspnet/AzureSignalR-samples/tree/master/samples

...