【问题标题】:RoleEnvironment initialization in Azure on IIS x64 bit throws an errorIIS x64 位上 Azure 中的 RoleEnvironment 初始化引发错误
【发布时间】:2012-07-03 05:36:21
【问题描述】:

我创建了在 IIS 下运行的 web 服务,它是 x64 位的。我在 Azure 机器(ws2008 r2)上使用自定义安装脚本部署了它。我创建了自定义应用程序池(64 位,托管管道模式:经典,.net v2,使用 NetworkService 帐户作为服务用户)。一切似乎都配置正确,但是当我尝试运行我的应用程序时,出现以下错误:

System.TypeInitializationException:“Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment”的类型初始化程序引发了异常。 ---> System.TypeInitializationException: '' 的类型初始化器抛出异常。 ---> .ModuleLoadException: C++ 模块在尝试初始化默认 appdomain 时加载失败。

我可以运行独立的 win 表单应用程序,并且此方法可以正常工作。更重要的是,当我将应用程序池切换到 32 位并运行我的应用程序时它会失败(因为它具有 x64 位组件),但是稍后当切换回 x64 时它可以正常工作,RoleEnvironment 返回正确的数据。

你有什么想法我在配置方面会做错什么,所以这个模块无法在 x64 位版本中加载?

【问题讨论】:

    标签: azure


    【解决方案1】:

    这可能会有所帮助。您可以将启动任务添加到 Windows Azure 项目的 .csdef 文件中,以配置 IIS 以允许 64 位应用程序中的 32 位模块。

    在您的 Windows Azure 项目 .csdef 文件中:

    <?xml version="1.0" encoding="utf-8"?>
    <ServiceDefinition>
      <WebRole ...>
    ... 
        <Startup>
          <Task commandLine="ConfigureIIS.cmd" executionContext="elevated" taskType="simple" />
        </Startup>
      </WebRole>
    </ServiceDefinition>
    

    ConfigureIIS.cmd(全一行):

    %windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true

    【讨论】:

      【解决方案2】:

      我相信您需要通过启动任务在您的 Azure VM 中安装 VC++ x64 运行时,因为您使用的一些参考需要 VC++ 运行时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-06
        相关资源
        最近更新 更多