Azure WebRole CloudConfigurationManager.GetSetting返回null

我有一个带有WebRole项目的Azure云解决方案。

Windows Azure Tools version: 2.2 

WebRole项目中的packages.config包含:

  

我“Nuget Enable Package Restore”因此假设在构建期间链接和引用了正确的包。

以下行在我的开发盒Azure Compute模拟器上运行正常,但是,当我部署(签入TFS在线,构建解决方案并开始部署到Azure)时,此行返回null:

 CloudConfigurationManager.GetSetting("StorageConnectionString") 

我已经阅读了其他几篇文章,但到目前为止还没有能够解决这个问题。 是否有一个我不知道的软件包/ SDK不兼容?

问题结果与我如何配置我的Azure项目有关,我将在下面解释。 我也在MSDN论坛上问了这个问题并在那里得到了一些帮助。

TLDR; 在Visual Studio中,我的项目设置为带有WebRole的Azure云服务。 但是,我正在将该项目部署到生产中的“Azure网站”。 Azure云服务与WebRoleAzure网站之间存在重要差异。

以下是一些更多细节:Azure可以托管网站/ Web服务,作为两种不同项目类型和服务配置的一部分。 当您转到Azure门户并创建新服务时,您可以创建:

  1. Azure云服务
  2. Azure网站

Azure Cloud Service可能包含也可能不包含WebRole 。 如果是,那么它将通过看起来像这个http://servicename.cloudapp.net的端点访问 。 另一方面,Azure网站托管在端点上,如http://websitename.azurewebsites.net 。 差异远远超出了域名。

WebRole与网站

WebRole(您可以在Visual Studio中创建“Cloud Service”解决方案的一部分)连接到您创建的其余Cloud Service ,因此可以引用和使用属于Cloud Service的资源,例如存储在.cscfg文件中的设置和配置。 CloudConfigurationManager库正确解析并引用这些设置。

但是,网站是一个独立的项目,就像您部署到IIS Express的Web应用程序一样。 一个网站本质上映射到Visual Studio中的“Web应用程序”解决方案。 即使您在Web应用程序中引用了CloudConfigurationManager库,它也不知道如何处理此类项目。

网站解决方案

无论如何,这次我重新创建了我的项目作为“Web应用程序”解决方案(而不是“云服务”)。 我将我的设置存储在Web.Config(以及Web.Debug.Config和Web.Release.Config风格)中:

         

在代码中,我使用了ConfigurationManager库:

 string mySetting = ConfigurationManager.AppSettings["MyAppSettingKey"]; 

进一步讨论

请随意检查此MSDN线程,以便进一步讨论此主题。

从Azure SDK 2.2升级到2.3后,我遇到了类似的问题。 似乎在我升级项目后,解决方案 – >启动项目已从Azure项目更改为Web角色项目。 结果是当我运行解决方案时,Web角色项目在IIS Express中运行,而不是在Azure模拟器中运行。 将解决方案的启动项目更改回Azure项目可修复此特定问题。

据我了解,

如果您的云服务用完或本地用完,CloudConfigurationManager.GetSetting将会查看web.config。

请将您的设置从ServiceConfiguration.Cloud.cscfg文件添加到web.config文件,它将起作用。

例如:
在ServiceConfiguration.Cloud.cscfg文件中:


如果您有任何问题,请告诉我。

我将Azure SDK从2.0升级到2.2后得到了这个。 我能够解决:

  1. 右键单击Azure项目,然后选择“属性”。 根据“应用程序”选项卡更新Azure SDK。
  2. 右键单击“管理NuGet包”。 在左侧单击“更新”并更新WindowsAzure.ConfigurationManager。