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に移行する際に同様の問題に直面している他のユーザーの助けになることを願っています。