Dynamics CRM 2011 サンドボックス処理サービスとプラグインのデバッグ (設置型)

みなさん、こんにちは。

今回も引き続きサンドボックス処理サービスのトピックをお届けします。 
以前の記事で、プラグインの登録先による挙動の違いを確認しましたが、 
今回は登録したプラグインをデバッグしてみたいと思います。

この記事では以前作成したプラグインを利用してデバッグしますが、
基本的にどのプラグインでも同様ですので、お手元のプラグインで
お試しいただいても結構です。

プラグインのデバッグは設置型かオンラインで方法が変わり、設置型の
場合には、完全信頼、部分信頼、同期、非同期によって変わります。
今回の記事では設置型におけるデバッグのみを紹介します。

プラグインのデバッグ

プラグインは、開発で利用した Visual Studio 2010 をプロセスにアタッチ
することで実行可能です。アタッチ先のプロセスは、プラグインの登録に
よって変わります。早速試してみます。

完全信頼 - 同期プラグインのデバッグ

プラグインを完全信頼、且つステップを同期で登録した場合には、アタッチ
先のプロセスは w3wp.exe になります。

[アセンブリを完全信頼で登録]
image

[ステップを同期で登録]
image

1. Visual Studio 2010 でデバッグするプラグインのプロジェクトを
開きます。

2. デバッグ | プロセスにアタッチをクリックします。

3. 選択可能なプロセスより w3wp.exe を選択します。選択肢に出無い場合、
プロセスにアタッチの画面一番下にある 「すべてのユーザからのプロセスを
表示する」 にチェックをつけてください。また IISRESET 直後の場合等は、
Internet Explorer で Dynamics CRM 2011 に接続してから試してください。

image

4. アタッチボタンをクリックするとアタッチが完了します。

5. 任意の箇所にブレークポイントを置きます。

6. プラグインをトリガーする操作を行ってください。

7. 以下のようにブレークポイントで実行がとまれば成功です。その後は
通常通りデバッグを行います。

image

完全信頼 - 非同期プラグインのデバッグ

プラグインを完全信頼、且つステップを非同期で登録した場合には、アタッチ
先のプロセスは CrmAsyncService.exe になります。

[ステップを非同期で登録]
image

1. 手順は上記と同じですが、アタッチ先のみ以下となります。尚、CrmAsyncService.exe
が複数ある場合は、同名の全てのプロセスにアタッチしてください。

image

2. プラグインをトリガーする操作を行います。プラグインは非同期で実行
されるため、先ほどとタイミングが異なり、操作自体が完了した後に
ブレークポイントでブレークされます。

image

部分信頼 - 同期/非同期プラグインのデバッグ

アセンブリを部分信頼 (サンドボックス) に登録した場合は、同期/非同期に関わらず
アタッチ先は Microsoft.Crm.Sandbox.WorkerProcess.exe になります。ただし
サンドボックス処理サービスへのアタッチの場合には、追加で対応が必要になります。

まずは以下の手順でデバッグをして見ます。

[アセンブリを部分信頼で登録]
image

[ステップの登録は任意]
image

1. 上記までと同じ手順で、アタッチ先を Microsoft.Crm.Sandbox.WorkerProcess.exe
にします。複数ある場合には全てのアタッチします。

image

2. プラグインをトリガーする操作を行います。ブレークされるタイミングは
ステップの登録が同期/非同期で異なります。

image

3. この状態でステップを進めず、30 秒待ちます。

4. 以下のエラーが Dynamics CRM 2011 側で出て、デバッグが終了します。

image

サンドボックスサービスは、パフォーマンスと堅牢性の観点より、30 秒以上
処理が無い場合に、自動で再起動するように設計されているため、このような
現象が発生します。

5. 上記現象を回避するため、以下のレジストリを追加します。

場所: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM
項目: SandboxDebugPlugins (DWORD型)
値: 1

image

6. サービスより 「Microsoft Dynamics CRM サンドボックス処理サービス」 を
再起動します。

7. 再度デバッグを行います。今回は 30 秒を経過しても、自動でプロセスが
再起動されることは無くなりました。

※デバッグが完了後は項目を削除するか、値を 0 に変更してください。

まとめ

設置型の場合、プラグインのデバッグは比較的容易に行えることが今回の
ことから分かります。ただしプラグインの登録状況によってアタッチする
プロセスが変わる点を、ご注意ください。

次回はオンライン環境のプラグインのデバッグを紹介します。

- Dynamics CRM サポート 中村 憲一郎