Как я могу создать выходную привязку к Сервису SignalR из Azure Функции? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь реализовать приложение чата в реальном времени. После выполнения функции согласования клиент добавляет сообщение в коллекцию Cosmos.

enter image description here

https://docs.microsoft.com/en-us/azure/azure-signalr/signalr-concept-azure-functions

  1. Внесено изменение в коллекцию Cosmos DB

  2. Событие изменения передается в ленту изменений Cosmos DB

  3. Функции Azure запускаются событием изменения с использованием триггера Cosmos DB

  4. Выходная привязка службы SignalR публикует сообщение для службы SignalR

  5. Служба SignalR публикует сообщение всем подключенным клиентам

Я позаботился о первых 3 шагах, но я застрял на шаге 4. Есть ли какие-либо примеры кода, демонстрирующие, как устанавливается выходная привязка SignalR между триггером и службой SignalR? Я использую C# и в идеале хотел бы образец, который использует только атрибуты (то есть без конфигурации json).

Ответы [ 2 ]

2 голосов
/ 31 января 2020

Здесь у вас есть пример того, как отправить сообщение в SignalR с Azure Функция: https://docs.microsoft.com/en-us/azure/azure-signalr/signalr-concept-serverless-development-config

1 голос
/ 31 января 2020

Вы можете использовать Azure Выходную привязку SignalR , например, для подключения Cosmos DB Change Feed к SignalR:

public static async Task Run(
    [CosmosDBTrigger(
        databaseName: "your-monitored-db",
        collectionName: "your-monitored-collection",
        ConnectionStringSetting = "CosmosConnectionStringSettingName",
        LeaseCollectionName = "leases")]
        IReadOnlyList<Document> events,
    [SignalR(HubName = "events", ConnectionStringSetting = "SignalRConnectionStringSettingName")] 
        IAsyncCollector<SignalRMessage> signalRMessages,
    ILogger log)
{
    await signalRMessages.AddAsync(new SignalRMessage()
    {
        Target = "nameOfTheSignalRHub",
        Arguments = new[] {
            events.Select(singleEvent => JsonConvert.DeserializeObject<YourEventClass>(singleEvent.ToString()))
        }
    });
}

Пожалуйста, см. этот репозиторий для полное решение, которое использует архитектуру, которую вы предлагаете.

...