Где должен быть создан экземпляр 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 здесь что-то делает не так, либо клиент на самом деле поточно-ориентирован и плохо документирован.