2013-03-25 397 views
0

我下面的代碼更改:錯誤處理爲Windows Azure存儲遷移從1.7到2.0

try 
{ 
    blob.FetchAttributes(); 
} 
catch (StorageClientException e) 
{ 
    if (e.ErrorCode == StorageErrorCode.ResourceNotFound) 
     .... 
} 

到:

try 
{ 
    blob.FetchAttributes(); 
} 
catch (StorageException e) 
{ 
    if (e.RequestInformation.ExtendedErrorInformation.ErrorCode == StorageErrorCodeStrings.ResourceNotFound) 
     .... 
} 

後我運行它,它給了我一個NullException因爲:

e.RequestInformation.ExtendedErrorInformation = NULL,

但是

e.RequestInformation.HTTPStatusMessage =「指定的blob不存在。」

e.RequestInformation.HTTPStatusCode = 404

我想,以測試HttpStatusMessage,但我覺得它是不是安全的做到這一點,因爲消息可能會隨時間而改變,任何人都可以幫助我在這種情況下我應該怎麼做,如果我想保持我原來的邏輯行爲?

回答

1

ErrorCode在舊庫中實際上與新庫中的ErrorCode不同。舊庫試圖根據異常類型,HTTP狀態代碼和服務器返回的錯誤代碼(如果有的話)對錯誤進行分類。在某些情況下,這會造成更多混淆,因爲不同的錯誤被映射到單個值StorageErrorCode

因此,在Azure存儲客戶端庫2.0中,傳統StorageErrorCode枚舉不再存在。相反,我們要求我們的用戶直接檢查HTTP狀態代碼。如果服務器返回一個響應正文,該正文可以包含進一步的信息,如Status and Error Codes文章中所述。當這個數據存在時,ErrorCode將相應地填充。

在您的示例中,FetchAttributes發出Get Blob Properties請求,該請求不返回響應正文。這就是爲什麼ExtendedErrorInformation爲空。

+0

非常感謝您的幫助,因此爲了檢查服務器是否返回響應主體,我該怎麼做?如果(e.RequestInformation.HTTPStatusCode!= 404) 這個工作嗎? – Talen 2013-03-28 19:13:49

+0

你實際上可以檢查ExtendedErrorInformation屬性本身。如果它不爲空,則意味着服務器返回了一個包含更多錯誤信息的響應主體。然後你可以進一步調查發生了什麼。 – 2013-03-29 05:34:09