2014-04-25 75 views
1

我調用BeginReceive()在這樣一個SubscriptionClient:)天青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。通過查看SubscriptionClient.EndReceive()的MSDN頁面,我不清楚什麼時候EndReceive()返回null。是否因爲我在BeginReceive()中指定的時間限制已超出?還是因爲有錯誤?

回答

1

看來,如果超過了時間限制,回調被調用。當我們嘗試通過調用SubscriptionClient.EndReceive()來檢索郵件時,將返回null

默認超時值是一分鐘,並且無法設置無限超時。如果您想要無限超時,如果消息爲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; 
    } 
} 

來源:http://social.msdn.microsoft.com/Forums/windowsazure/en-US/b14587ce-3fc7-4b56-8a35-4f2c6babce26/servicebus-subscriptionclientendreceive-returns-null

0

用於接收該ServiceBus不會拋出異常狀態的合同。當Receive/BeginReceive/ReceiveAsync超時時,該調用將執行它需要做的任何操作以返回值(例如執行回調),並且在超時情況下將返回null。