Как вызвать CosmosDBTrigger и HttpResponseMessage для Azure SignalR в .Net Core MVC? - PullRequest
0 голосов
/ 25 января 2019

У меня есть приложение .Net Core Web MVC, и я хочу отправить клиенту уведомление с помощью Azure SignalR , когда в CosmosDB запускается лента изменений .

FeedToSignalR запускает новые данные в CosmosDB и передает их через SignalR клиентам.

SignalRConfiguration инициализируйте соединение SignalR Websocket.

Проблема в том, что я не знаю, как я могу вызвать эти методы.

Могу ли я вызвать методы в моей программе .cs или Startup.cs ?

public static class SignalRConfiguration
    {
        private static AzureSignalR signalR = new AzureSignalR(Environment.GetEnvironmentVariable("AzureSignalRConnectionString"));

        /// <summary>
        /// This HttpTriggered function returns the SignalR configuration to the web client.
        /// </summary>
        [FunctionName("SignalRConfiguration")]
        public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Anonymous)]HttpRequestMessage req, TraceWriter log)
        {
            return req.CreateResponse(HttpStatusCode.OK, 
                new {
                    hubUrl = signalR.GetClientHubUrl("cosmicServerlessHub"),
                    accessToken = signalR.GenerateAccessToken("cosmicServerlessHub")
                });
        }
}

public static class FeedToSignalR
    {
        private static AzureSignalR signalR = new AzureSignalR(Environment.GetEnvironmentVariable("AzureSignalRConnectionString"));

        /// <summary>
        ///  This function Triggers upon new documents in the Cosmos DB database and broadcasts them to SignalR connected clients.
        /// </summary>
        [FunctionName("FeedToSignalR")]
        public static async Task Run([CosmosDBTrigger(
            databaseName: "ToDoList",
            collectionName: "Items",
            ConnectionStringSetting = "AzureCosmosDBConnectionString",
            LeaseConnectionStringSetting = "AzureCosmosDBConnectionString",
            CreateLeaseCollectionIfNotExists = true,
            LeaseCollectionName = "leases")]IReadOnlyList<Document> documents, TraceWriter log)
        {
            if (documents != null && documents.Count > 0)
            {
                var broadcast = documents.Select((d) => new
                {
                    id = d.GetPropertyValue<string>("id"),
                    price = d.GetPropertyValue<string>("price")
                });

                await signalR.SendAsync("cosmicServerlessHub", "NewMessages", JsonConvert.SerializeObject(broadcast));
            }
        }
}

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Да, это именно тот код. Я думаю, проблема в том, что у меня нет json «function.json», как здесь »https://docs.microsoft.com/de-de/azure/azure-functions/functions-bindings-cosmosdb-v2#trigger---c-script-example" для привязки Cosmos DB Trigger и другого json для связывания HTTP Trigger .

Этот пример «https://anthonychu.ca/post/cosmosdb-real-time-azure-functions-signalr-service/”» делает именно то, что я хочу, но г-н Чу использовал .Net Standard , мне нужно сделать это в .Net Core MVC или лучше .Net Framework MVC . На веб-странице есть изображение архитектуры, которая описывает то, что я хочу сделать, я попытался воспроизвести шаги с 3 по 5 на вашем примере.

Единственное, что мне нужно сделать, это поместить два файла json в мой проект, чтобы связать HTTP Trigger и Cosmos DB Trigger ? Как проект .Net Core знает, как называть json файлами?

0 голосов
/ 25 января 2019

Это две функции, которые запускаются различными событиями.Ваш FeedToSignalR использует Cosmos DB Trigger , который автоматически запускается при добавлении нового документа в коллекцию Items , как описано в комментарии над кодом функции..

SignalRConfiguration , с другой стороны, использует триггер HTTP , который вызывается при каждом вызове HTTP на его конечную точку HTTP.

ЕслиЯ правильно распознаю код, он исходит от https://github.com/ealsur/serverlessnotifications

На основе объяснения :

  1. Браузер будет выполнять HTTP-вызов в функцию SignalRConfiguration для получения конфигурации
  2. Когда набирается новое сообщение, оно сохраняет это сообщение в БД Cosmos , вызывая другую функцию .
  3. Этот новый документ в коллекции затем вызовет функцию запуска Cosmos DB , которая, в свою очередь, отправит его через сигнал R.
...