Использование ASP.NET Core SignalR в клиентском приложении консоли .NET для получения сообщений из Azure SignalR - PullRequest
0 голосов
/ 23 апреля 2019

Я изучаю SignalR, но столкнулся с препятствием.

У меня есть функция Azure, которая успешно отправляет сообщения в размещенную службу Azure SignalR (настроена в режиме без сервера)

Я былпосле этого быстрого запуска:

Быстрый запуск: создание комнаты чата с функциями Azure и службой SignalR с использованием C #

Чего я хотел бы добиться, так это по сути получать сообщения от серверов вмое клиентское приложение.Для создания этого прототипа я создал консольное приложение.

Я добавил следующие пакеты Nuget

Microsoft.AspNetCore.SignalR.Client -Version 1.1.0 Microsoft.Azure.WebJobs.Extensions.SignalRService

Кажется, что вся инфраструктура работает нормально - я основываю это предположение, что я могу запустить демонстрационный веб-сайт по следующему адресу, указать его на свой локальный экземпляр (илимой экземпляр размещен в Azure) https://azure -samples.github.io / signalr-service-quickstart-serverless-chat / demo / chat-v2 /

Сообщения, опубликованные моей функцией AzureFunction, публикуютпрямо в окно чата.

Как заставить эти сообщения печатать на консоли?

using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
using System;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.ReadKey();

            var connection = new HubConnectionBuilder().WithUrl("http://localhost:7071/api").Build();


            connection.On<SignalRMessage>("newMessage", (message) =>
            {
                Console.WriteLine(message.Arguments);
            });


            connection.On("newMessage", (string server, string message) =>
            {
                Console.WriteLine($"Message from server {server}: {message}");
            }
  );
            await connection.StartAsync();
            Console.ReadKey();
        }
    }
}

Я сильно подозреваю, что моя проблема связана с

connection.On <...>

операторов.Они никогда не стреляют.Connection.StartAsync (), кажется, работает нормально и устанавливает соединение с экземпляром Azure SignalR.

Я упустил какой-то фундаментальный момент?Сейчас я просто мечусь.

Короче - может кто-нибудь дать мне указатель на ПОЛУЧЕНИЕ и ЗАПИСЬ сообщений в моем окне консоли - во многом так же, как сообщения печатаются в веб-браузере вдемонстрация веб-чата (см. вторую ссылку выше).

Сообщения - это простые широковещательные сообщения, которые я хочу передать всем подключенным клиентам.

Почти все примеры приведены в Javascript.

Заранее спасибо.

Ответы [ 2 ]

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

Как только я обнаружил, как добавить запись в SignalR, я увидел, что она не может определить тип отправляемого сообщения.

Это сработало, как только я изменил свое соединение. На правильный тип, такой как

connection.On<CorrectType>("newMessage", (message) =>
            {
                Console.WriteLine(message.stringproperty);
            });

Мое мышление было введено в заблуждение при просмотре статьи Разработка и настройка функций Azure с помощью Azure SignalRСлужба

Там, где они «на первый взгляд» (по крайней мере, на мой взгляд) добавляют сообщение типа «SignalRMessage» в SignalR.Когда на самом деле они добавляли тип сообщения «CorrectType»

CorrectType message
signalRMessages.AddAsync(
    new SignalRMessage
    {
        // the message will only be sent to these user IDs
        UserId = "userId1",
        Target = "newMessage",
        Arguments = new [] { message }
    });
0 голосов
/ 15 июля 2019

Мне удалось обойти это, передав 'object' при вызове 'connection.On' вместо того, чтобы создавать класс CorrectType и позволить .net выяснить, как будет выглядеть объект.

Это было действительно разрешение типа, которое предотвратило запуск .On на клиенте Windows.

...