Dynamics CRM 4 ではサイズが大きいカスタマイズファイルをインポートするとタイムアウトが発生します。インポート処理中の画面がいつまでも終了しないなどの動作を行います。インポートに失敗すると環境が壊れる場合もあるので、タイムアウトの伸ばすことで、インポートに失敗しないようにします。

対処方法についてKBがありますので、紹介しておきます。

A time-out occurs when you import large customization files into Microsoft Dynamics CRM
http://support.microsoft.com/kb/918609/en-us

対処方法は2つあります。環境構築などに大きなカスタマイズを読み込む必要がある場合は、対処方法を2つともやっておき、タイムアウトが発生しないようにしておくことをお勧めします。

大きなカスタマイズをインポートする場合は、念のためCRMデータベースのバックアップを取っておいてから作業を行ってください。インポートに失敗してCRMのデータベースが壊れると厄介です。

1. レジストリを編集してタイムアウト時間を延ばす

CRMをインストールしたサーバの次のレジストリキーにDWORD型のレジストリエントリOLEDBTimeout , ExtendedTimeout を作成します。

作成先のエントリ:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM

OLEDBTimeoutの値に10進数で86400(24時間) と入力します。それ以上の値も指定可能です。

ExtendedTimeout に2147483647(16進数で0x7FFFFFFF) を入力します。

2. Web.config の executionTimeout, maxRequirementLength を編集する

Dynamics CRM アプリケーションをインストールしたサイト(既定でC:\Inetpub\wwwroot) 配下のDynamics CRM の Web.config を開き、 2箇所あるhttpRuntime タグのexecutionTimeoutとmaxRequestLength を編集します。httpRuntime 属性にexecutionTimeout や maxRequestLength がない場合は、属性を追加して編集します。

タイムアウトを防ぐために、executionTImeout を86400000など、十分大きな値に設定します。大きなカスタマイズをアップロードできるように、maxRequestLength をアップロードするカスタマイズのサイズより大きな値81920(約80MBなど)に設定します。

以上で準備が完了です。Web.config の httpRuntime セクションは2箇所あるので注意してください。また、セキュリティのため、インポートが完了したら初期値に設定値を戻すことをお勧めします。

大きなカスタマイズを1度にインポートするようにすると、処理に非常に時間がかかる場合があるため、タイムアウトを伸ばすことで対処します。

タイムアウトを伸ばすだけでなく、インポートするカスタマイズの定義を小さくすることは、処理の失敗を防ぐために有効です。検証環境などからエクスポートする単位をユーザ定義エンティティ、既定のエンティティ、それ以外のカスタマイズなどの単位にわけてエクスポートし、インポート時にその順でインポートファイルの処理を行い、全部のインポートが完了したあとでカスタマイズを公開することで、インポート処理を高速かつ失敗しにくくできます。