2013-01-16 11 views
9

मैं WindowsAzure.StorageClient 1.7 से WindowsAzure.Storage 2.0 में माइग्रेट कर रहा हूं, और मैं अभी अपवादों के प्रबंधन पर काम कर रहा हूं। इस guide और अन्य स्रोतों के बाद, मुझे पता चला मैंWindowsAzure.Storage v2 StorageException

try 
{ 
    // Something 
} 
catch (StorageClientException e) 
{ 
    switch (e.ErrorCode) 
    { 
     case StorageErrorCode.ContainerNotFound: 
     case StorageErrorCode.ResourceNotFound: 
     case StorageErrorCode.BlobNotFound: 
     case StorageErrorCode.ConditionFailed: 
      // Do something 
    } 
} 

से करने के लिए

try 
{ 
    // Something 
} 
catch (StorageException e) 
{ 
    switch (e.RequestInformation.ExtendedErrorInformation.ErrorCode) 
    { 
     case StorageErrorCodeStrings.ContainerNotFound: 
     case StorageErrorCodeStrings.ResourceNotFound: 
     case BlobErrorCodeStrings.BlobNotFound: 
     case StorageErrorCodeStrings.ConditionNotMet: 
      // Do something 
    } 
} 

सरल लग रहा है की ओर पलायन करना पड़ा। समस्या विस्तारित है IrrorInformation हमेशा शून्य के बराबर है। इसके बजाय HttpStatusMessage कहता है 'निर्दिष्ट ब्लॉब मौजूद नहीं है।', जैसा कि इसे करना चाहिए।

मैंने सोचा कि यह परीक्षण पर्यावरण के सिम्युलेटर के कारण हुआ था, लेकिन वास्तविक अज़ूर पर्यावरण में इसे आजमाने से मुझे एक ही स्थिति में सूख गया।

कोई विचार?

+0

प्रलेखन के अनुसार, विस्तारित त्रुटि जानकारी कोड लॉग के लिए भरोसा नहीं किया जाना चाहिए सी - http://msdn.microsoft.com/en-us/library/windows/desktop/aa375374%28v=vs.85%29.aspx –

+0

@RussCam यह लिंक आरपीसी के बारे में प्रतीत होता है, स्टोरेज क्लाइंट एपीआई नहीं। – fsimonazzi

उत्तर

3

मैंने अभी कोशिश की और यह देखकर आश्चर्य हुआ कि वास्तव में विस्तारित एरर इन्फोर्मेशन ऑब्जेक्ट शून्य है। हालांकि यह हमेशा शून्य नहीं है। उदाहरण के लिए, यदि मैं ब्लॉब कंटेनर बनाने का प्रयास करता हूं जो blobContainer.Create() विधि का उपयोग कर पहले से मौजूद है, तो मुझे एक गैर-शून्य विस्तारित त्रुटि मिल जाएगी। हालांकि अगर मैं एक ब्लॉब के गुणों को आज़माता हूं और प्राप्त करता हूं जो ब्लॉब कंटेनर में मौजूद नहीं है, तो मुझे एक शून्य विस्तारित त्रुटि जानकारी प्राप्त होगी। मुझे लगता है कि कोई यह नहीं मान सकता कि विस्तारित त्रुटि जानकारी हमेशा उपलब्ध रहेगी।

मैंने यह भी देखा कि 2.0 के लिए आपके कोड में, आप StorageErrorCodeStrings का उपयोग कर रहे हैं। कृपया ध्यान दें कि इसे 2.0 से हटा दिया गया है और केवल संस्करण 1.8 या इससे पहले उपलब्ध है। सोचा कि मुझे उल्लेख करना चाहिए कि

अद्यतन: कृपया @VollmonD से नीचे टिप्पणी देखें। इसे संस्करण 2.0.3 में जोड़ा गया है।

+1

StorageErrorCodeStrings 2.0.3 में जोड़ा गया है, मुझे पैकेज को nuget के माध्यम से मिला है। FetchAttributes उन परिस्थितियों में से एक है जहां मुझे समस्या मिली। अब मैं यह देखने की कोशिश कर रहा हूं कि त्रुटि संदेश प्राप्त करने के लिए मैं त्रुटि कोड स्ट्रिंग का उपयोग कर सकता हूं और इसे HttpStatus से तुलना कर सकता हूं। आपके ब्लॉग एंट्री के लिए धन्यवाद, इससे इन माइग्रेशन दिनों के दौरान मुझे बहुत मदद मिली :) –

+0

मेरा बुरा! मुझे नहीं पता था कि स्टोरेज टीम ने इसे वापस शामिल किया था। मुझे वापस जाना और अपवाद हैंडलिंग पर पोस्ट अपडेट करना होगा :)। मुझे खुशी है कि आपको मेरी ब्लॉग पोस्ट पसंद आईं। –

6

एक और विकल्प RequestInformation.HttpStatusCode इसके बजाय देखना है। यह वैसे भी अधिक भरोसेमंद प्रतीत होता है। आपका कोड को आसानी से नहीं बल्कि अनुवाद:

try 
{ 
    // Something 
} 
catch (StorageException e) 
{ 
    switch (e.RequestInformation.HttpStatusCode) 
    { 
     case (int)HttpStatusCode.NotFound: 
     case (int)HttpStatusCode.PreconditionFailed: 
     // Do something 
    } 
} 
+0

हां, मुझे वह स्थिति कोड पता था, लेकिन यह मेरे उद्देश्यों के लिए बहुत अधिक सामान्य है। मुझे विभिन्न कार्यों को लेने के लिए, Azure के त्रुटि कोड तारों द्वारा दी गई 'शक्ति' की आवश्यकता थी। मैं HttpStatusMessage से स्ट्रिंग लेने और कोड को वापस करने के लिए Azure वाले लोगों की तुलना करने में कामयाब रहा। @ उत्तर में दूसरे जवाब में सही था, समस्या केवल FetchAttributes के साथ है, जो मैंने देखा है। –

0

पार्टी के लिए देर हो चुकी है, लेकिन अगर आप ब्लॉब से हटाने से आइटम को संभालने के लिए कोशिश कर रहे हैं या सिर्फ यदि वे मौजूद जाँच (विस्तार विधि थोड़े दृष्टिकोण)। अब आप उपयोग कर सकते हैं:

यहाँ CloudBlob पर तरीकों की एक सूची के लिए चेक: https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.cloudblockblob.aspx

संबंधित मुद्दे