2014-09-05 134 views
10

我试图将Azure网站连接到Azure blob(我打算在容器中托管一些文件,然后从我的网站抓取它们)。将Azure Blob与Azure网站连接

我开始了这个教程: http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-get-started/

我部署了我的网站,然后开始按照本教程: http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/#setup-connection-string

由于我使用Azure的网站,我下面的代码添加到我的web.config文件(位于WebApplication1项目下)。 Views文件夹下还有一个web.config文件,但我没有修改它。

<configuration> 
    <appSettings> 
     <add key="StorageConnectionString" 
      value="DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key" /> 
    </appSettings> 
</configuration> 

我跟着教程的所有步骤,并安装相关的NuGet包,然后包括在我Controllers/HomeController.cs文件中的这些命名空间:

using System.Configuration; 
using Microsoft.WindowsAzure.Storage; 
using Microsoft.WindowsAzure.Storage.Auth; 
using Microsoft.WindowsAzure.Storage.Blob; 

然后,我添加以下语句在ActionResult Index()方法(默认运行)。

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString); 

当我尝试和运行解决方案,现在我得到这个错误:

enter image description here

我也试过直接把StorageConnectionString的值(用我的帐户名和密钥),而不是在以下声明中引用它:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key"].ConnectionString); 

我仍然收到相同的错误。我似乎无法在互联网上找到任何东西。有任何想法吗?

谢谢!

+0

,如果你提供的InnerException为能提供一些有用的信息,这可能是有益的。有几件事要尝试......首先,你的第二个例子是尝试搜索一个名为'DefaultEndpointsProtocol ....'的ConnectionString,当它只是值时。其次,直接添加存储帐户字符串,即CloudStorageAccount storageAccount = CloudStorageAccount.Parse(“DefaultEndpointsProtocol = https; AccountName = account-name; AccountKey = account-key”]); – SeanCocteau 2014-09-05 08:30:05

回答

25

您在代码中存在根本性错误。

首先,你设置AppSetting:

<configuration> 
    <appSettings> 
     <add key="StorageConnectionString" 
      value="DefaultEndpointsProtocol=https;AccountName=account- name;AccountKey=account-key" /> 
    </appSettings> 
</configuration> 

然后尝试得到一个连接字符串:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString); 

这根本不起作用。设置AppSetting时,您需要阅读AppSetting。当您设置ConnectionString时,您需要阅读连接字符串。

因此,该解决方案将只保留在web.config原样,并更改行你在哪里得到的存储帐户:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]); 

或保留线连接字符串,但更改的web.config :

<configuration> 
    <connectionStrings> 
     <add name="StorageConnectionString" 
      connectionString="DefaultEndpointsProtocol=https;AccountName=account- name;AccountKey=account-key" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</configuration> 

当然,你必须把云存储帐户和存储帐户密钥(account-name根本不会工作)的实际值。

3

这是来自Azure的更糟糕的文档,文章确实告诉您创建AppSetting,然后代码告诉您检索ConnectionString。

的替代解决方法是存储的细节作为ConnectionString的,离开代码是:

<add name="StorageConnectionString" connectionString="DefaultEndpointsProtocol=https;AccountName=your-account;AccountKey=your-key" />