2012-09-28 4 views
2

가이 방식으로 MessageSession을 시작하는 방법과 더불어, SubscriptionClient 유형이있다 : -푸른 서비스 버스 - SubscriptionClient.AcceptMessageSession() SubscriptionClient.BeginAcceptMessageSession 대 ​​() 애저 서비스 버스 네임 스페이스에서

MessageSession session = subscriptionClient.AcceptMessageSession(...); 

이것은 동기 버전이며 MessageSession을 리턴합니다. 라이브러리는 비동기 버전 인 BeginAcceptMessageSession()도 제공합니다. 이 콜백은 콜백을 호출하고 IAsyncResult 및 전달할 상태 객체를 전달하기 때문에 나를 방해하고 있습니다. 제 경우에는 SubscriptionClient 인스턴스를 전달하므로 SubscriptionClient에서 EndAcceptMessageSession()을 호출 할 수 있습니다. BeginAcceptMessageSession()은 반환 유형이 void입니다.

BeginAcceptMessageSession()을 통해 허용되는 MessageSession에 어떻게 액세스합니까? 콜백의 결과 매개 변수로 돌아 오는 것은 EndAcceptMessageSession()을 통해 BeginAcceptMessageSession()을 종료하는 데 필요한 내 SubscriptionClient 인스턴스입니다.

MessageSession 참조를 찾을 수 없습니다. 이 문서는이 점에 도움이되지 않습니다. Google에서 검색 할 경우 검색 결과가 부족한 3 페이지 만 표시됩니다. 대부분의 검색 결과는 MSDN의 메소드 자체에 대한 온라인 설명입니다. AsyncManager.Parameters를 살펴보면 비어 있습니다.

BeginAcceptMessageSession()을 호출하여 내가 생성 한 MessageSession에 대한 참조를 얻을 수있는 방법을 아는 사람이 있습니까?

답변

2

이 같은 메소드를 호출해야합니다

  1. 콜이 (가) IAsyncResultSubscriptionClient을 받아들이는 방법과 방법을 시작합니다. 다른 방법은
  2. (이 경우 AcceptDone), 당신이 여기에서 보는 것은 비동기 프로그래밍 모델의 표준 구현입니다 MessageSession

를 얻기 위해 IAsyncResultEndAcceptMessageSession를 호출합니다.

private static void Do() 
    { 
     SubscriptionClient client = ... 
     client.BeginAcceptMessageSession(AcceptDone, client); 
    } 

    public static void AcceptDone(IAsyncResult result) 
    { 
     var subscriptionClient = result.AsyncState as SubscriptionClient; 
     if (subscriptionClient == null) 
     { 
      Console.WriteLine("Async Subscriber got no data."); 
      return; 
     } 

     var session = subscriptionClient.EndAcceptMessageSession(result); 
     ... 

     subscriptionClient.Close(); 
    } 
+0

와우, 고맙습니다. EndAcceptMessageSession()!의 반환 유형을 알지 못했습니다!. 요즘 내 영웅 이잖아. 서비스 버스는 훌륭하지만 커뮤니티는 문서화 된 방법 설명을 덤프하는 것 이상을 필요로합니다! –

+0

SubscriptionClient.BeginAcceptMessageSession()을 사용하고 MessageSession.BeginReceive()를 사용하려면 AcceptDone() 내에서 BeginReceive()를 호출 할 수 있습니까? 비동기 적으로 실행되지만 병렬로 실행되지 않도록하는 유일한 방법이라고 생각됩니다. –

관련 문제