IIS x64 位上的 Azure 中的角色环境初始化引发错误



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

System.TypeInitializationException:'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment' 的类型初始值设定项抛出异常。 ---> System.TypeInitializationException:'' 的类型初始值设定项引发异常。 ---> .模块加载异常:C++模块在尝试初始化默认应用程序域时加载失败。

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

您是否知道在配置方面我会做错什么,因此此模块无法以x64位版本加载?

这可能会有所帮助。您可以将启动任务添加到 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

我相信

你需要通过启动任务在 Azure VM 中安装 VC++ x64 运行时,因为你使用的某些引用需要 VC++ 运行时。

最新更新