Вопрос или проблема
У меня настроен Azure SignalR в безсерверном режиме, который подключен к .net 6 функции, работающей в режиме in-process. У меня есть метод с HttpTrigger, который отправляет сообщение на событие в определённом SignalR хабе, и другой с SignalRTrigger, который слушает события сообщений на том же хабе с той же категорией. Источник для функции приложения Когда я вызываю HttpTrigger, он успешно отвечает и отправляет сообщение в SignalR, Живой журнал трассировки SignalR. Однако кажется, что SignalR никогда не передаёт это сообщение на триггер в моём приложении, так как он только логирует http триггер, но не signalr триггер. Журнал FunctionApp
То же самое происходит с приложением, размещённым в Azure, или работающим локально в режиме отладки. Я настроил приложение и SignalR в соответствии с https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-signalr-service-trigger?tabs=isolated-process%2Cnodejs-v4&pivots=programming-language-csharp#example
Я пробовал варианты различного регистров в категории/цели, не вижу ошибок CORS в логах, но всё равно добавил исключения CORS. И я использую последнюю версию Microsoft.Azure.WebJobs.Extensions.SignalRService (1.14.0) из nuget.
Буду признателен за любой совет.
Ответ или решение
Проблема, с которой вы столкнулись, связана с несоответствием в настройках вашего Azure SignalR и вашей функции Azure. Позвольте мне предложить несколько шагов, которые помогут вам решить эту проблему.
-
Проверка целевого маршрута (target):
Убедитесь, что вы правильно указалиtarget
при отправке сообщения через ваш HTTP-триггер. Это значение должно совпадать с именем метода триггера SignalR (имя обработчика), который вы хотите вызвать. Проверьте, чтобы в вашем коде, где вы отправляете сообщение, указать его следующим образом:await signalRMessages.AddAsync(new SignalRMessage { Target = "имяВашегоМетода", Arguments = new[] { /* данные, которые хотите передать */ } });
-
Проверка категорий (category):
Убедитесь, чтоcategory
в вашем HTTP-триггере совпадает с тем, что используется в вашем SignalR-триггере. Если вы используетеcategory
для ограничения маршрутов, убедитесь, что они идентичны. -
Обновление пакетов:
Убедитесь, что все необходимые NuGet-пакеты обновлены до последних версий. ИспользуйтеMicrosoft.Azure.WebJobs.Extensions.SignalRService
версии не ниже 1.14.0, как вы уже сделали, но также важно следить за обновлениями других связанных пакетов. -
Конфигурация CORS:
Проверьте настройки CORS. Убедитесь, что ваш SignalR-сервис и функция имеют правильные настройки CORS и что вы не ограничиваете доступ, что может помешать передаче сообщений. -
Логи и отладка:
Изучите логи вашего приложения для поиска возможных ошибок или предупреждений. Часто важная информация может быть пропущена в обычном просмотре. -
Тестирование локально:
Попробуйте запустить вашу функцию локально с использованием Azure Functions Core Tools. Это позволит вам отладить проблемы в более контролируемой среде. -
Проверка маршрутизации:
Убедитесь, что строки запроса и маршрутизации для ваших триггеров настроены правильно. Если ваш HTTP-триггер и SignalR-триггер находятся в одном классе, убедитесь, что они правильно совместимы. -
Пример работы:
Если у вас есть возможность, протестируйте с помощью простого примера: создайте минимальную конфигурацию с одним HTTP-триггером и простым SignalR-триггером, которые взаимодействуют между собой, чтобы изолировать проблему.
Если после выполнения всех этих шагов проблема не решается, следует ознакомиться с документацией Azure и обратиться в поддержку Azure для более глубокого анализа проблемы. Успехов в решении вашей задачи!