2011-06-25 7 views
8

मुझे "निर्दिष्ट संसाधन मौजूद नहीं है" अपवाद प्राप्त हो रहा है जब मैं किसी परिणाम के पुन: प्रयास करने का प्रयास करता हूं ListBlobs() कॉल करें। जब मैं इसे सीधे एक्सेस करता हूं तो मुझे ब्लॉब विशेषताएं मिल सकती हैं, लेकिन मैं उपनिर्देशिका में सभी ब्लॉब्स की एक सूची प्राप्त करने का प्रयास कर रहा हूं।azure CloudBlobDirectory.ListBlobs() लौटाता है "निर्दिष्ट संसाधन मौजूद नहीं है।", लेकिन fetchAttributes() उसी डेटा का उपयोग करके काम करता है

मैंने यह छोटा परीक्षण लिखा कि वास्तव में समस्या कहां है। मेरे पास एक परीक्षण चालक और दो विधियां हैं। पहली विधि, "GetBlockBlobDateTime" ठीक चलती है और मौजूदा ब्लॉब का दिनांक समय लौटाती है। दूसरी विधि "GetBlobDirFiles" एक ही इनपुट का उपयोग करती है और जब मैं blobItems को पुन: स्थापित करने का प्रयास करता हूं तो उत्तेजना फेंकता है।

foreach (IListBlobItem blobItem in blobItems) 

ध्यान दें कि समान डेटा दोनों विधियों के लिए उपयोग किया जाता है। मैं क्या खो रहा हूँ?

public static void DoTest(string baseURL, string container, string directory, string fileName) 
    { 
     DateTime t = GetBlockBlobDateTime(baseURL, container, directory, fileName); 
     List<string> fileList = GetBlobDirFiles(baseURL, container, directory); 
    } 

    public static DateTime GetBlockBlobDateTime(string baseURL, string container, string directory, string fileName) 
    { 
     CloudBlobClient blobClient = new CloudBlobClient(baseURL); 
     CloudBlobDirectory blobDir = blobClient.GetBlobDirectoryReference(container); 
     CloudBlobDirectory subDirectory = blobDir.GetSubdirectory(directory); 
     CloudBlockBlob cloudBlockBlob = subDirectory.GetBlockBlobReference(fileName); 
     cloudBlockBlob.FetchAttributes(); 
     DateTime cloudTimeStampUTC = cloudBlockBlob.Properties.LastModifiedUtc; 
     return cloudTimeStampUTC; 
    } 

    public static List<string> GetBlobDirFiles(string baseURL, string container, string directory) 
    { 
     CloudBlobClient blobClient = new CloudBlobClient(baseURL); 
     CloudBlobDirectory blobDir = blobClient.GetBlobDirectoryReference(container); 
     CloudBlobDirectory subDirectory = blobDir.GetSubdirectory(directory); 
     IEnumerable<IListBlobItem> blobItems = subDirectory.ListBlobs(); 

     List<string> fileList = new List<string>(); 
     foreach (IListBlobItem blobItem in blobItems) 
     { 
      fileList.Add(blobItem.Uri.ToString()); 
     } 
     return fileList; 
    } 

उत्तर

13

ठीक है, मैं यह पता लगा:

जाहिर है, आपको अनुमति की जरूरत नहीं है फ़ाइल विशेषताओं पाने के लिए, लेकिन आप निर्देशिका में फ़ाइलों को सूचीबद्ध करने के लिए करते हैं।

CloudBlobClient blobClient = new CloudBlobClient(baseURL); 

काम करता है जब आप इस तरह गुण लाने के लिए जा रहे हैं:

cloudBlockBlob.FetchAttributes(); 

लेकिन आप इस तरह क्रेडेंशियल प्रदान करने की जरूरत है:

CloudBlobClient blobClient = 
        new CloudBlobClient(baseURL, 
        new StorageCredentialsAccountAndKey(myAccount, myKey)); 

जब आप की तरह धब्बे सूची करने जा रहे हैं यह:

 var blobList = subDirectory.ListBlobs(); 
     foreach (var blobInfo in blobList) 
+1

अच्छी तरह से चित्रण के लिए किया गया यह स्वयं से बाहर है, और उत्तर पोस्ट करने के लिए धन्यवाद। +1 –

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