Где должен быть создан экземпляр NotificationHubClient?

Я экспериментирую с шиной уведомлений Azure, и моя цель - сделать так, чтобы служба WebApi отправляла push-уведомления о конкретных событиях, инициируемых действиями контроллера.

Мне было интересно, где будет правильное место для создания экземпляра NotificationHubClient объект.
Я предполагаю, что это может быть либо в контроллере (прямо перед отправкой уведомления), либо вместо этого он может быть глобально инициализирован (как в App_Start) и повторно использован в контроллерах.

В этом примере учебника, NotificationHubClient создается в контроллере:

public RegisterController()
{
    var cn = "<FULL_SAS_CONNECTION_STRING>";
    hubClient = NotificationHubClient(cn, "<NOTIFICATION_HUB_NAME>");
}

Что было бы предпочтительным способом?

2 ответа

Решение

Я думаю, что вы хотите создать экземпляр этого в контроллере. В отличие от классов QueueClient и SubscriptionClient члены экземпляра NotificationHubClient не гарантируют поточно-ориентированную защиту в соответствии с документами. Это означает, что если у вас был глобальный экземпляр и вы использовали его во время обработки нескольких запросов, они могут плохо взаимодействовать.

Хороший вопрос! Как утверждает MikeWo, он не задокументирован как поточно-ориентированный. Но если вы посмотрите на Azure WebJobs SDK, они фактически кешируют клиента по комбинации (строка подключения, имя концентратора). Так что либо сама Microsoft здесь что-то делает не так, либо клиент на самом деле поточно-ориентирован и плохо документирован.

Другие вопросы по тегам