2014-04-25 3 views
1

나는이 같은 SubscriptionClient에 BeginReceive()를 호출 :푸른 ServiceBus SubscriptionClient.EndReceive()는 null을 반환

client.BeginReceive(new TimeSpan(6, 0, 0), new AsyncCallback(DownloadResults), null); 

그리고 DownloadResults에서() 콜백이 나는 전화 client.EndReceive은() 클라이언트가 정적 멤버 클래스]의

static public void DownloadResults(IAsyncResult ar) 
{ 
    // Get the message from the service bus. 
    msg = client.EndReceive(ar); 
    if (msg == null) 
    { 
     Console.WriteLine("Error!"); 
     return; 
    } 
} 

때때로 client.EndReceive는() null를 반환합니다. EndReceive()가 null을 반환 할 때 정확히 SubscriptionClient.EndReceive()에 대한 MSDN 페이지를 살펴보면 나에게 명확하지 않습니다. BeginReceive()에서 지정한 시간 제한을 초과했기 때문입니까? 또는 오류가 있었기 때문입니까?

답변

1

시간 제한을 초과하면 콜백이 호출되는 것처럼 보입니다. SubscriptionClient.EndReceive()을 호출하여 메시지를 검색하려고 시도하면 null이 반환됩니다.

기본 시간 초과 값은 1 분이며 무한 시간 초과를 설정할 방법이 없습니다. 무한 시간 제한을 원할 경우 메시지가 null 인 경우 SubscriptionClient.BeginReceive()으로 다시 전화 할 수 있습니다. 예를 들어

:

static public void DownloadResults(IAsyncResult ar) 
{ 
    // Get the message from the service bus. 
    msg = client.EndReceive(ar); 
    if (msg == null) 
    { 
     // Start waiting for the message again. 
     client.BeginReceive(new TimeSpan(6, 0, 0), new AsyncCallback(DownloadResults), null); 
     return; 
    } 
} 

출처 : ServiceBus는 예외를 throw하지 않습니다 상태를 수신하기위한 http://social.msdn.microsoft.com/Forums/windowsazure/en-US/b14587ce-3fc7-4b56-8a35-4f2c6babce26/servicebus-subscriptionclientendreceive-returns-null

0

계약. Receive/BeginReceive/ReceiveAsync 시간이 초과되면 콜백은 콜백 실행과 같이 값을 반환하기 위해 필요한 모든 작업을 수행하며 타임 아웃 상황에서는 null을 반환합니다.