Webアプリケーションの32/64ビットを実行する
質問
Windows Web 2008 x64インストールを実行しています。
Excelファイルをインポートする機能を持つアプリケーションの要件により、Webアプリケーションを32ビットモードで実行するように変更する必要がありました。 MSAccess / Excelライブラリはx64では使用できません。
trust = Fullで実行するには、アプリケーションを改良する必要もありました。以前は、level = mediumでした。
この問題に対する適切な回避策はありますか。 1つの画面でExcelインポートが必要なために、信頼レベルを下げ、アプリを32ビットに妥協する必要はありません(この画面の使用も頻繁ではありません)
アプリケーションで32ビットを使用するように特定のフォルダー/ページを設定し、残りをx64として設定することは可能ですか?できるとは思わない。信頼レベルについても同じです。信頼レベルのアプリケーションは特定のものですか、それともネストされたフォルダーで送信できますか?
解決
FoxFireが正しく指摘しているため、同じプロセスで32ビットと64ビットのコードを混在させることはできません。
Officeとやり取りする必要があるASP.NETアプリケーションには、高い信頼レベルが必要です。
「サンドボックス化」として知られる手法を使用することで、これを回避する方法があります。
あなたがすることは、Excelで必要な作業だけを行うラッパーアセンブリを作成することです。 [assembly:AllowPartiallyTrustedCallers]
属性でアセンブリをマークし、署名してからGACにデプロイします。
Office相互運用コンポーネントと通信するために必要なこのアセンブリ内のクラスはすべて、 [PermissionSet(SecurityAction.Assert、Unrestricted = true)]
または必要な要求に関連付けられる必要があります。
これにより、サーバーの信頼レベルを下げることができますが、Officeコンポーネントは引き続き使用できます。
これは、「信頼された」サンドボックスアセンブリをGACにドロップできるように、サーバーへの管理アクセス権があるという前提に基づいています。
他のヒント
同じプロセス内で、32ビットと64ビットを混在させることはできません。おそらく、Excelの処理を行う2番目のアプリケーションを作成し、それを32ビットの実行可能ファイルにコンパイルできます。次に、Webアプリケーションからその実行可能ファイルを呼び出す(いくつかのパラメーターを指定してファイルを実行する)ことができます(それでも完全な信頼が必要ですが、64ビットを実行できます)。
編集:必ずしも完全な信頼は必要ありません。カスタムの信頼レベルを作成することもできます。しかし、ポイントは、標準のWeb信頼レベルでは実行されないということです。