3

Azure 알림 버스를 실험하고 있습니다. 제 목표는 컨트롤러 동작에 의해 트리거 된 특정 이벤트에 대해 푸시 알림을 보내는 WebApi 서비스를 사용하는 것입니다.NotificationHubClient를 어디에서 인스턴스화해야합니까?

NotificationHubClient 개체를 인스턴스화하는 데 올바른 위치가 궁금합니다.
컨트롤러에서 (알림을 보내기 바로 전에)있을 수도 있고 대신 (App_Start에서와 같이) 전역 적으로 초기화하고 컨트롤러에서 다시 사용할 수도 있습니다. this example tutorial에서

NotificationHubClient는 컨트롤러에서 인스턴스화 :

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

은 무엇 선호하는 방법이 될 것이다?

답변

3

컨트롤러에서 이것을 인스턴스화하고 싶습니다. QueueClient 및 SubscriptionClient 클래스와 달리 NotificationHubClient의 인스턴스 멤버는 the docs에 따라 Threadsafe로 보장되지 않습니다. 즉, 글로벌 인스턴스가 있고 여러 요청 처리 중에이를 사용하면 잘 작동하지 않을 수 있습니다.

+0

링크가 끊어졌습니다. – Zapnologica

+0

고마워요. @ Zapnologica. 수정 됨. – MikeWo

1

좋은 질문! MikeWo가 말했듯이 thread-safe로 문서화되어 있지 않습니다. 그러나 Azure WebJobs SDK를 보면 실제로는 cache the client (연결 문자열, 허브 이름) 조합입니다. 그래서 마이크로 소프트 자체가 여기 뭔가 잘못되었거나 클라이언트가 실제로 스레드로부터 안전하고 문서화가 잘 못된 것입니다.

+1

미래에 스레드를 안전하지 못하게하기 위해 옵션을 계속 열어 둘 수도 있습니다. 어떤 경우에는 스레드 변경이 안전하지 않다고 생각하지 않는 한 크게 변경되지 않습니다. 그러니 조심해. – Taran