NotificationHubClient应该在哪里实例化?

时间:2013-09-02 11:00:10

标签: c# azure asp.net-web-api azureservicebus azure-notificationhub

我正在尝试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>");
}

什么是首选方式?

2 个答案:

答案 0 :(得分:4)

我认为你想在控制器中实例化它。与QueueClient和SubscriptionClient类不同,根据the docs,NotificationHubClient的实例成员不能保证是Threadsafe。这意味着如果您有一个全局实例并在多个请求处理期间使用它,那么它们可能无法很好地交互。

答案 1 :(得分:2)

好问题!正如MikeWo所说,它没有记录为线程安全的。但是,如果您查看Azure WebJobs SDK,它们实际上是cache the client每个(连接字符串,集线器名称)组合。因此,要么Microsoft本身在这里做错了,要么客户端实际上是线程安全的,而且记录很差。