2013-08-16 35 views
9

Tôi đang cố sử dụng Trình giả lập lưu trữ Azure để làm việc với bộ nhớ blob. Tôi dường như không thể làm cho nó hoạt động và đã lãng phí cả ngày cố gắng mà không thành công. Tôi tiếp tục nhận được một lỗi bị cấm 403 mặc dù đây là lưu trữ dành cho nhà phát triển. Tôi hy vọng ai đó ở đây có thể giúp tôi.Trình giả lập lưu trữ Azure - tạo blob cho 403 Thư bị cấm

Trước đây tôi đã chạy thành công chương trình tương tự này trên Azure. Tuy nhiên, thử nghiệm 3 tháng của tôi hết hạn mà tôi không thực sự sử dụng nó, và bây giờ mà tôi đã quay trở lại để nhìn vào Azure tôi phải chạy trên giả lập lưu trữ (sau khi thay đổi chuỗi kết nối để dev lưu trữ).

Tôi sẽ mô tả chi tiết những gì tôi đã làm.

Trước tiên cho tôi trấn an bạn rằng tôi có mọi thứ cần thiết được cài đặt (tôi nghĩ):

Tôi có cả Visual Studio 2012 Pro và Visual Studio 2012 Express for Web (đó là miễn phí). Tôi đã cài đặt các công cụ bổ sung cần thiết cho Azure bằng cách sử dụng trình cài đặt Nền tảng Web. Nếu tôi nhìn vào Add/Remove programs tôi thấy tôi có

  • Windows Azure Công cụ cho Microsoft Visual Studio 2012 -v2.1
  • Windows Azure Thư viện cho NET -v2.1
  • Windows Azure Emulator - v2.1
  • Windows Azure Authoring Tools -v2.1

tôi có thể tạo một dự án điện toán đám mây trong VS2012 nếu tôi muốn, và nếu tôi làm điều đó ra mắt thành công trên giả lập. Vì vậy, có vẻ như vấn đề của tôi là chỉ với bộ lưu trữ giả lập.

Dưới đây là những gì tôi đã làm:

Bước 1.

tôi tạo một dự án ASP.NET MVC4 mới. Tôi đang sử dụng .NET framework 4.5. Điều đó tạo ra các mẫu dự án cơ bản với một HomeController.cs và AccountController.cs

Bước 2.

tôi sử dụng NuGet để có được "Windows Azure Storage". Tôi tin rằng điều này đặt WindowsAzure.Storage.dll phiên bản 2.0.6.1 trong tài liệu tham khảo dự án của tôi. Bên cạnh đó tôi thấy rằng tài liệu tham khảo của tôi cũng bao gồm -Microsoft.WindowsAzure.Configuration v2.0.0.0 -Microsoft.WindowsAzure.Diagnostics v2.1.0.0 -Microsoft.WindowsAzure.ServiceRuntime v2.1.0.0 -Microsoft .WindowsAzure.StorageClient v1.7.0.0

Bước 3.

Trong file Web.config, tôi thêm các thẻ sau trong các thẻ

này về cơ bản là tên tài khoản và chìa khóa tất cả mọi người được cho là sử dụng khi sử dụng trình mô phỏng.

Bước 4.

Trong HomeController.cs Tôi tạo một hành động. Hành động này được cho là tạo vùng chứa trên bộ nhớ Azure blob và tải tệp lên đó. Đây là mã.Như bạn có thể nhìn thấy nó là khá nhiều mã tiêu chuẩn mà bạn tìm thấy trong các ví dụ mới bắt đầu


public ActionResult AddBlobToBlobContainerStorageEmulator() 
    { 
     // Retrieve storage account from connection string 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["EmulatorStorageConnectionString"]); 

     // Create the blob client. 
     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

     // Retrieve a reference to the previously created container. 
     CloudBlobContainer container = blobClient.GetContainerReference("myemulatortcont"); 

     // Create the container if it doesn't already exist. 
     container.CreateIfNotExists(); 


     // Retrieve reference to a blob named "mytestblob". 
     CloudBlockBlob blockBlob = container.GetBlockBlobReference("myemulatortestblob.jpg"); 

     // Create or overwrite the "mytestblob" blob with contents from a local file. 
     using (var fileStream = System.IO.File.OpenRead(@"E:\TUTORIALS\Windows Azure\Azure NOTES and stuff\table.jpg")) 
     { 
      blockBlob.UploadFromStream(fileStream); 
     } 

     return Content("Blob uploaded to container on storage emulator"); 
    } 

Bước 5.

tôi chắc chắn rằng các mô phỏng tính toán được bắt đầu: Start> All Programs > Windows Azure> Trình giả lập> Trình giả lập Windows Azure Tính toán

Bước 6.

Đó là tất cả. Tôi không tạo dự án đám mây hay bất cứ thứ gì, vì vậy khi tôi chạy nó sẽ chạy trên "Local IIS Web Server" theo thuộc tính của dự án (còn được gọi là IIS Express).

Bây giờ tôi đi đến Debug> Bắt đầu gỡ lỗi và khởi chạy trang web trong cửa sổ trình duyệt như mong đợi tại localhost: 57810.

Nếu tôi hướng đến

http://localhost:57810/Home/AddBlobToBlobContainerStorageEmulator 

nó nên bắn phương pháp hành động của tôi.

Thay vào đó tôi thấy

enter image description here

Đường dây 118 là trong RED .... vì vậy về cơ bản container không thể được tạo ra.

Ai đó có thể cho tôi biết điều gì sai ở đây. Tôi có cần phải bằng cách nào đó thêm một số sự cho phép để giả lập lưu trữ phát triển? Tôi không hiểu tại sao nó nói Cấm.

Tôi đã tự hỏi nếu có thể có một số vấn đề trên máy tính của tôi, hoặc có thể có một số xung đột giữa Azure. Các phiên bản của các dll trong dự án của tôi bằng cách nào đó không chính xác cho giả lập phát triển? Hoặc có thể có một lỗi trong v2.1?

Tôi đã giải thích chính xác cách tôi đã thực hiện dự án của mình nhưng tôi sẵn sàng tải lên toàn bộ nội dung nếu có ai đó muốn thử chạy nó.

Cảm ơn bạn vì bất kỳ trợ giúp nào bạn có thể cung cấp.

+0

Nếu bạn gỡ lỗi, 'storageAccount' trông như thế nào? "EmulatorStorageConnectionString" có đúng không? –

+1

Bạn đã cấp quyền truy cập công khai vào blob của mình chưa? –

+0

@lc: EmulatorStorageConnectionString phải chính xác, đó là chuỗi mặc định để sử dụng cho trình giả lập. Tôi nhận được nó từ đây: http://msdn.microsoft.com/en-us/library/windowsazure/hh403989.aspx – Gary

Trả lời

14

Khá thẳng thắn Tôi là một chút khó chịu rằng mã gốc không làm việc. Xét cho cùng, bài viết MSDN của Microsoft (https://azure.microsoft.com/en-us/documentation/articles/storage-use-emulator/) nêu rõ chúng ta nên sử dụng:

Tên tài khoản: Tài khoản devstoreaccount1 chính: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw ==

Vậy tại sao các heck đã không làm việc ?

Trình mô phỏng lưu trữ cơ bản có điểm cuối khác với tài khoản lưu trữ đám mây. Ví dụ: điểm cuối blob mặc định cho tài khoản lưu trữ đám mây là http://[youraccount].blob.core.windows.net trong khi điểm cuối blob cho trình mô phỏng bộ nhớ là http://127.0.0.1:10000. Khi bạn chỉ cần chỉ định tên và khóa tài khoản lưu trữ cho trình mô phỏng bộ nhớ trong chuỗi kết nối của bạn, thư viện khách lưu trữ coi nó như tài khoản lưu trữ đám mây và cố gắng kết nối với http://devstoreaccount1.blob.core.windows.net bằng khóa tài khoản bạn đã cung cấp. Vì khóa cho devstoreaccount1 trong đám mây không phải là khóa bạn cung cấp, bạn nhận được lỗi 403.

Nếu bạn muốn kết nối với trình mô phỏng bộ nhớ bằng cách sử dụng tên và khóa tài khoản, bạn sẽ cần cung cấp các chi tiết bổ sung như các điểm cuối khác nhau. Vì vậy, chuỗi kết nối của bạn sẽ giống như sau:

var connectionString = @"DefaultEndpointsProtocol=http;AccountName=devstoreaccount1; 
AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==; 
    BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1; 
    TableEndpoint=http://127.0.0.1:10002/devstoreaccount1; 
    QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;"; 

Lưu ý các điểm cuối tôi đã chỉ định trong chuỗi kết nối.

var connectionString = "UseDevelopmentStorage=true"; 

Đoạn mã trên chỉ là dạng ngắn của chuỗi kết nối lớn mà tôi đã chỉ định ở trên.

Hy vọng điều này sẽ làm rõ sự nghi ngờ của bạn.

+1

Gaurav Tôi đánh dấu đây là câu trả lời đúng, cảm ơn vì đã giải thích lý do đằng sau chuỗi kết nối, nó thậm chí không xảy ra với tôi rằng các điểm kết thúc được liệt kê trong chuỗi kết nối! Tôi thấy bạn có một blog trên Azure, bây giờ tôi đang đi qua bài viết của bạn trên HTML5 và chunked tải lên Azure, công cụ tuyệt vời. – Gary

4

Tôi đã tìm ra !! Hoặc một cách thích hợp hơn tôi tìm thấy câu trả lời ở đây: https://stackoverflow.com/a/17500876/1400153

Trong đoạn code tôi đã đăng ở trên, tôi đã thay đổi dòng

// Retrieve storage account from connection string 
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["EmulatorStorageConnectionString"]); 

để

var connectionString = "UseDevelopmentStorage=true"; 
var storageAccount = CloudStorageAccount.Parse(connectionString); 

Đó là nghĩa đen sự thay đổi duy nhất tôi thực hiện cho các mã.

Ngoài ra, tôi đã nhấp vào biểu tượng trình mô phỏng trong thanh tác vụ của cửa sổ> Hiển thị giao diện người dùng giả lập bộ nhớ và tôi đã nhấp vào nút Đặt lại. Không chắc chắn nếu điều này đã giúp, tôi chỉ ghi lại hai điều tôi đã làm cho anh chàng tiếp theo bị mắc kẹt về điều này.

Và bây giờ nó hoạt động ...

Khá thẳng thắn Tôi hơi bực mình khi mã gốc không hoạt động.Xét cho cùng, bài viết MSDN của Microsoft (http://msdn.microsoft.com/en-us/library/windowsazure/hh403989.aspx) nêu rõ chúng ta nên sử dụng: Tên

tài khoản: devstoreaccount1 chìa khóa tài khoản: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw ==

Vậy tại sao các heck đã không làm việc? Bài viết đó đã được cập nhật tháng 7 năm 2012 để nó không chính xác lỗi thời. Vì vậy, nhiều giờ lãng phí ... nhưng ít nhất tôi có thể đi ngủ bây giờ biết rằng cuối cùng tôi nhận được một cái gì đó làm việc :)

0

Như đã đề cập trong các bài đăng trước, vui lòng không sử dụng tài khoản "devstoreaccount1" để kết nối với trình mô phỏng bộ nhớ Azure. Thay vào đó chỉ sử dụng "" UseDevelopmentStorage = true "" làm chuỗi kết nối và gắn devstorage DB thay vì "devstoreaccount1".

Hoàn dụ: Trong cấu hình:

add name ="ConnString" connectionString="UseDevelopmentStorage=true" 
..... 

Trong mã:

string connStr = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;    
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connStr); 

Bây giờ kết nối với tài khoản devStorage bằng cách lưu trữ Explorer hoặc bởi Server Explorer (VSTS) và giám sát hoạt động DB của bạn.

0
container.SetPermissions(
        new BlobContainerPermissions 
        { 
         PublicAccess = 
          BlobContainerPublicAccessType.Blob 
        }); 

Khi khởi tạo kết nối. Nhưng trước tiên, hãy sử dụng Ứng dụng khách để lưu trữ và thay đổi quyền của vùng chứa bằng cách sử dụng Ứng dụng khách.

Làm việc cho tôi;)

0

Chỉ cần thấy điều này với WindowsAzure.Storage 8.6.0. Tôi đi theo this issue 's nhận xét và sửa chữa mà làm việc đối với tôi là để thêm dòng sau vào ExcludeComponentCorrelationHttpHeadersOnDomains trong ApplicationInsights.config:

<Add>localhost</Add> 
<Add>127.0.0.1</Add> 

Có vẻ như tại một số điểm hồi quy đã được giới thiệu gây AI để thay đổi tiêu đề cho yêu cầu đến giả lập dẫn đến lỗi 403 bị cấm.

Các vấn đề liên quan