Dynamics CRM 2011 サンドボックス処理サービス

みなさん、こんにちは。

今回から数回にわたって Dynamics CRM 2011 から実装された
サンドボックス処理サービスに関連するトピックをお届けします。

サンドボックス処理サービスとは

サンドボックス処理サービスは、プラグインをより安全に実行するための
”隔離された環境” を提供するサービスです。

SDK には以下のように説明があります。

「Microsoft Dynamics CRM 2011 および Microsoft Dynamics CRM Online では、
隔離された環境でのプラグインの実行をサポートします。この隔離された環境
("サンドボックス" とも呼ばれます) の中で、プラグインは Microsoft Dynamics CRM
SDK のすべての機能を使用して組織の Web サービスにアクセスできます。

ファイル システム、システム イベント ログ、特定のネットワーク プロトコル、
レジストリなどへのアクセスは、サンドボックス内では禁止されています。ただし、
サンドボックス プラグインは、Windows Azure クラウドなどの外部エンドポイント
にはアクセスできます。」

プラグインの実態は C# のアセンブリであるため、基本的に .NET Framework で
記述できる内容で、実行権限があればその通りに機能します。しかしサンドボックスを
利用することで、プラグインからのローカルリソース等のアクセスに制限できるため、
サーバーを保護することが可能です。

オンライン環境ではサンドボックスへの展開が必須

設置型の場合、プラグインの登録先を選択できますが、オンライン環境に
プラグインを登録する場合には、サンドボックスが必須です。

またサンドボックスにプラグインを登録する場合、アセンブリの展開先は
データベースになります。

処理のフロー

サンドボックスに登録されたプラグインは、以下の順序で処理されます。

同期処理の場合

プラグインは IIS サービス w3wp.exe によってトリガーされ、実際のプロセスは
サンドボックスに引き渡されます。処理が完了後、サンドボックスは w3wp.exe に
通知します。

非同期処理の場合

プラグインは非同期サービスによってトリガーされ、実際のプロセルは
サンドボックスに引き渡されます。処理が完了後、サンドボックスは非同期サービスに
通知します。

サンドボックス処理サービスのプロセス

サンドボックス処理サービスの本体は Micorsoft.Crm.Sandbox.HosterService.exe
ですが、プラグインを処理する際に Microsoft.Crm.Sandbox.WorkerProcess.exe を
ワーカープロセスとして実行します。またこのワーカープロセスは各組織ごとに
作成されるため、ある組織のプラグインで問題が発生した場合にも、他の組織が
影響を受けることはなく、また問題が発生した組織のワーカープロセスもホストサービス
によって再起動されるため、次回実行時には影響を受けません。

まとめ

今回はサンドボックス処理サービスの簡単な紹介をしました。次回から、より詳細な
情報を紹介していきますので、お楽しみに。

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