组合的Azure Web角色和辅助角色项目在部署时未看到app.config

时间:2012-08-30 19:06:00

标签: azure app-config

我正在实现here描述的组合Web /辅助角色方案,您只需将以下内容添加到您的辅助角色中:

public override void Run()
{
    // This is a sample worker implementation. Replace with your logic.
    Trace.WriteLine("WorkerRole1 entry point called", "Information");
    while (true)
    {
        Thread.Sleep(10000);
        Trace.WriteLine("Working", "Information");
    }
}

问题,如帖子的评论中所述,该工作进程无法读取web.config,因此您必须添加app.config。还注意到app.config不会自动部署。

所以我的问题是如何配置我的项目以便部署app.config?

我已将app.config添加到我的项目中,将Build Action设置为“Content”,并“始终复制”

这项工作在EMULATOR中很精细,但在部署到Azure时却没有。

注意:我注意到在模拟器中创建了一个projectname.dll.config,但是在部署到Azure时却没有。 我正在使用VS2010,Windows Azure Tools 2011

我知道有些人会建议使用.cscfg文件,但我的许多组件都是从web.config / app.config获取设置: Elmah,瞬态故障处理客户端,诊断,电子邮件等......

3 个答案:

答案 0 :(得分:3)

请仔细阅读this blog post。它详细解释了Windows Azure Web角色与完整IIS中发生的情况。

您需要做的是添加 WaIISHost.exe.config 文件(复制到输出=始终复制)。并将所需的所有配置放在该文件中。这是因为,您的代码(RoleEntryPoint)存在于WaIISHost.exe进程中,而不是您的pdojectName.dll进程。

答案 1 :(得分:3)

对于我使用Azure SDK 1.8并使用发布从Visual Studio部署我的Web Worker角色,我必须包含一个名为的配置文件。使用我的设置的ProjectName.Dll.config。在windows azure中运行时,web角色无法获取app.config中的配置。并且app.config文件未转换为ProjectName.Dll.config并自动添加到部署包的bin文件夹中,因此您必须手动创建它并将其设置为始终复制。

答案 2 :(得分:2)

我正在使用Azure SDK 2.0和OS Family 3,并且对此非常困惑。所以我创建了一个MVC 4.0网站,其中包含各种答案中建议的所有4个配置文件。那就是:

  • 的Web.config
  • 的App.config
  • WaIISHost.exe.config
  • [的AssemblyName] .dll.config

除Web.config之外的所有内容都设置为“如果更新则复制”。

在configs文件中我写道:

  <appSettings>
    <add key="AppSettingFile" value="[NameOfConfigFile]"/>
  </appSettings>

在WebRole.cs中,我有以下代码:

    public class WebRole : RoleEntryPoint
    {
        public override void Run()
        {
            string appSetting = ConfigurationManager.AppSettings["AppSettingFile"] ?? "No config file found";
            Trace.TraceInformation("Config file: " + appSetting);

            while (true)
            {
                ...
            }
        }
    }

使用4 .config文件部署时的结果: “配置文件:App.config”。所以App.config必须是答案,对吗?

错误!仅部署Web.config和App.config时的结果: “配置文件:找不到配置文件”。嗯很奇怪。

使用Web.config,App.config和[AssemblyName] .dll.config进行部署时的结果: “配置文件:[AssemblyName] .dll.config”。所以[AssemblyName] .dll.config必须是答案,对吗?

错误!仅使用Web.config和[AssemblyName] .dll.config部署时的结果: “配置文件:找不到配置文件”。 WTF!

仅使用Web.config和WaIISHost.exe.config部署时的结果: “配置文件:找不到配置文件”

使用Web.config,App.config和WaIISHost.exe.config部署时的结果: “配置文件:找不到配置文件”。 WTF!

所以我的结论是你需要有3个或4个配置文件才能配置Web项目的Worker角色。

这显然是一个错误。就个人而言,我认为MS的意图是从WaIISHost.exe.config更改为App.config(通常与Worker Roles和.NET一致)。但App.config仅在存在所有4个.config文件时使用。

所以现在我正在使用Web.config以及App.config和[AssemblyName] .dll.config,它们包含完全相同的内容。

希望继续使用Azure SDK 2.x,我们只能使用App.config和Web.config。