问题出在我如何配置我的 Azure 项目,我将在下面解释。我还在MSDN 论坛上问过这个问题,并在那里得到了一些帮助。
TLDR;在 Visual Studio 中,我的项目设置为带有 WebRole 的 Azure 云服务。但是,我正在将项目部署到生产中的“Azure 网站”。带有 WebRole 的 Azure 云服务和Azure 网站之间存在重要区别。
以下是更多详细信息:Azure 可以将网站/Web 服务作为两种不同项目类型和服务配置的一部分进行托管。当您转到 Azure 门户并创建新服务时,您可以创建:
- Azure 云服务
- Azure 网站
Azure 云服务可能包含也可能不包含WebRole。如果是这样,则可以通过类似于http://servicename.cloudapp.net的端点访问它。另一方面,Azure 网站托管在类似http://websitename.azurewebsites.net的端点上。差异远不止域名。
Web角色与网站
WebRole(您可以在 Visual Studio 中创建为“云服务”解决方案的一部分)连接到您创建的云服务的其余部分,因此可以引用和使用属于云服务的资源,例如您存储在.cscfg文件中的设置和配置。CloudConfigurationManager库可以正确解析和引用这些设置。
然而,网站是一个独立的项目,很像您部署到 IIS express 的 Web 应用程序。网站本质上映射到 Visual Studio 中的“Web 应用程序”解决方案。CloudConfigurationManager库不知道如何处理此类项目,即使您在 Web 应用程序中引用了它。
网站解决方案
无论如何,这次我将我的项目重新创建为“Web 应用程序”解决方案(而不是“云服务”)。我将我的设置存储在 Web.Config(以及 Web.Debug.Config 和 Web.Release.Config 风格)中:
<configuration>
<appSettings>
<add key="MyAppSettingKey" value="MyAppSettingValue" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5.1" />
</system.web>
</configuration>
在代码中,我使用了ConfigurationManager库:
string mySetting = ConfigurationManager.AppSettings["MyAppSettingKey"];
进一步讨论
随意检查这个 MSDN 线程以进一步讨论这个主题。