我正在尝试Azure Notification Bus,我的目标是让WebApi服务在控制器操作触发的特定事件上发送推送通知。
我想知道实例化NotificationHubClient
对象的正确位置。
我认为它可以在控制器中(在发送通知之前),或者可以全局初始化(就像在App_Start中一样)并在控制器中重复使用。
在this example tutorial中,NotificationHubClient
在控制器中实例化:
public RegisterController()
{
var cn = "<FULL_SAS_CONNECTION_STRING>";
hubClient = NotificationHubClient(cn, "<NOTIFICATION_HUB_NAME>");
}
什么是首选方式?
答案 0 :(得分:4)
我认为你想在控制器中实例化它。与QueueClient和SubscriptionClient类不同,根据the docs,NotificationHubClient的实例成员不能保证是Threadsafe。这意味着如果您有一个全局实例并在多个请求处理期间使用它,那么它们可能无法很好地交互。
答案 1 :(得分:2)
好问题!正如MikeWo所说,它没有记录为线程安全的。但是,如果您查看Azure WebJobs SDK,它们实际上是cache the client每个(连接字符串,集线器名称)组合。因此,要么Microsoft本身在这里做错了,要么客户端实际上是线程安全的,而且记录很差。