6

最近、.NETアプリケーションをWindowsAzureクラウドサービスに移行するプロセスを開始しました。私たちのアプリケーションは、AspPDF(PDFの作成と操作用)やAspJPEG(画像のサイズ変更用)など、多くのCOMクラスコンポーネントに大きく依存していました。典型的な非クラウドIISセットアップでは、DLLを(zippy32を使用して)本番サーバーに登録するだけで、すべて問題ありません。

Azureではプロセスが少し異なります。同様の課題を抱えている人を支援するために、私自身の質問に答えます。このメソッドは、展開プロセスの一部としてサーバーに登録する必要があるすべてのdllに使用できます。

4

1 に答える 1

5

AspPDFおよびAspJPEGコンポーネントをWindowsAzureクラウドサービスに登録するには、DLL登録プロセスを展開ルーチンに組み込む必要があります。Azureがアプリケーションを解凍するとき、DLLを登録するコマンドを起動する必要があります。これは、これらの依存関係がクラウド環境で一貫して機能するように、すべてのVMで永続化する必要があります。

これを実現するために、ターゲットサーバーで実行するコマンドファイルを指示できます。このタスクは、ServiceDefinition.csdefファイルで次のように定義されています。

<Startup>
  <Task commandLine="RegisterPersits.cmd" executionContext="elevated" taskType="simple" />
</Startup>

昇格された実行コンテキストにより、サービスが稼働する前にこのプロセスを実行する必要があります。Azure Fabric Controllerは、BINフォルダーで.cmdファイルを探します。メモ帳で.cmdを作成してから、拡張子を変更できます。.cmdファイルの内容は次のとおりです。

chcp 1252>NUL
regsvr32 /s .\library\asppdf64.dll
regsvr32 /s .\library\aspjpeg64.dll
exit /b 0

パラメータ/sを使用してzippy32ツールを呼び出しています。これにより、応答がサイレントになります。つまり、ファブリックコントローラを混乱させるポップアップが発生しなくなります。なぜ展開プロセスが初期化フェーズでハングしているのか疑問に思って多くの時間を無駄にしたので、これは重要です... / sパラメータを追加すると、この問題が解決しました!

私の場合、DLLをlibraryというフォルダーに配置しましたが、.cmdファイルで正しく参照されていれば、好きな場所に配置できます。Visual Studio内の起動コマンドで参照されるDLLには、必ず次のファイルプロパティを設定してください。

ビルドアクション:コンテンツ

出力ディレクトリにコピー:常に

DLLを登録するためのこの追加のプロセスは、展開プロセスにほとんど無視できる時間を追加します。AspPDFに固有のもう1つのポイントは、正しいDLLバージョンを使用することの重要性です。Persitsは32ビットと64ビットのdllを発行します。AzureVMは64ビット環境で実行されるため、上記のプロセスでasppdf64.dllを登録することが重要です。32ビットdllを登録すると、アプリケーション内であいまいなエラーがスローされます。幸い、64ビットバージョンのAspPDF用に別途ライセンスを購入する必要はありません。

これが、AspPDFなどのcomクラスコンポーネントをAzureに移行する際に同様の問題に直面している他のユーザーの助けになることを願っています。

于 2013-02-20T14:07:20.043 に答える