4

我正在尝试使用 Azure 通知总线,我的目标是让 WebApi 服务根据控制器操作触发的特定事件发送推送通知。

我想知道实例化NotificationHubClient对象的正确位置在哪里。
我假设它可以在控制器中(在发送通知之前),或者它可以被全局初始化(如在 App_Start 中)并在控制器中重新使用。

本示例教程中,NotificationHubClient在控制器中实例化了:

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

什么是首选方式?

4

2 回答 2

5

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

于 2013-09-02T13:12:56.723 回答
2

好问题!正如 MikeWo 所说,它没有被记录为线程安全的。但是,如果您查看 Azure WebJobs SDK,它们实际上会按(连接字符串、集线器名称)组合缓存客户端。所以要么微软自己在这里做错了,要么客户端实际上是线程安全的,只是记录不充分。

于 2017-01-09T12:58:11.323 回答