0

IISで実行するWebサービスを作成しましたが、これはx64ビットです。Azureマシン(ws2008 r2)にカスタムインストールスクリプトを使用してデプロイしました。カスタムアプリプールを作成しました(64ビット、マネージドパイプラインモード:クラシック、.net v2、サービスユーザーとしてNetworkServiceアカウントを使用)。すべてが正しく構成されているようですが、アプリケーションを実行しようとすると、次のエラーが発生します。

System.TypeInitializationException:「Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment」の型初期化子が例外をスローしました。---> System.TypeInitializationException:''の型初期化子が例外をスローしました。---> .ModuleLoadException:デフォルトのappdomainを初期化しようとしたときに、C++モジュールをロードできませんでした。

スタンドアロンのwinformアプリケーションを実行できますが、この方法は正しく機能します。さらに、アプリプールを32ビットに切り替えてアプリケーションを実行すると、失敗します(x64ビットコンポーネントがあるため)が、後でx64に戻すと正しく機能し、RoleEnvironmentは正しいデータを返します。

このモジュールをx64ビットバージョンでロードできないように、構成に関して何を間違えることができるかについて何か考えがありますか?

4

2 に答える 2

0

使用している参照の一部には VC++ ランタイムが必要であるため、スタートアップ タスクを介して Azure VM に VC++ x64 ランタイムをインストールする必要があると思います。

于 2012-07-02T21:36:21.070 に答える
0

これが役立つ場合があります。Windows Azure プロジェクトの .csdef ファイルにスタートアップ タスクを追加して、64 ビット アプリケーションで 32 ビット モジュールを許可するように IIS を構成できます。

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 (すべて 1 行):

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

于 2012-07-02T01:19:19.720 に答える