在IIS x64位上Azure中的RoleEnvironment初始化会引发错误

时间:2012-07-01 19:33:42

标签: azure

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

System.TypeInitializationException:'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment'的类型初始值设定项引发异常。 ---> System.TypeInitializationException:''引发异常的类型初始值设定项。 ---> .ModuleLoadException:尝试初始化默认appdomain时无法加载C ++模块。

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

您是否有任何想法在配置方面我可以做错什么,因此无法在x64位版本中加载此模块?

2 个答案:

答案 0 :(得分:0)

这可能会有所帮助。您可以向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

答案 1 :(得分:0)

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