Dynamics CRM 2011 Developer Extensions 紹介 – CrmOrganizationServiceContext のキャッシュのコントロール

みなさん、こんにちは。

今回は前回に続き、CrmOrganizationServiceContext のキャッシュ機能の
トピックをお届けします。今回はキャッシュのコントロールです。

CrmOrganizationServiceContext の依存関係

CrmOrganizationServiceContext はいくつかのクラスに依存し、また
機能を提供します。依存関係は以下のページを参照してください。

Developer Extensions のコンテキスト オブジェクト モデル
https://technet.microsoft.com/ja-jp/library/gg695819.aspx

このページの表から、キャッシュを保持するクラスが確認できます。

キャッシュの無効化

キャッシュをコントロールする方法の一つとして、キャッシュ機能を
完全に無効にする方法が考えらます。この場合、キャッシュ機能を
もつクラスの依存を取り除くだけで実現可能です。

var connection = new CrmConnection("Xrm");
// CrmConnection から OrganizationService を生成。キャッシュ機能なし
var myService = new OrganizationService(connection);
// キャッシュなしの組織サービスを渡して XrmContextService を生成
var xrm = new XrmContext(myService);

ほかの方法として、キャッシュ機能を持っている OrganizationServiceCache
の設定を変更することも可能です。

var connection = new CrmConnection("Xrm");
// OrganizationServiceCache の Mode で Disable を設定
var myServiceCache = new OrganizationServiceCache();
myServiceCache.Mode = OrganizationServiceCacheMode.Disabled;
// 生成した OrganizationServiceCache と CrmConnection よりサービス生成
var myService = new CachedOrganizationService(connection, myServiceCache);
var xrm = new XrmContext(myService);

キャッシュのタイムアウト時間を制御

サービスコンテキストの生成にはアプリケーション構成ファイルを利用できます。
またその中で詳細な設定が可能です。詳細は以下のページを参照してください。

構成ファイルを使用したコンテキストの構成
https://technet.microsoft.com/ja-jp/library/gg695805.aspx

ここでは既定の構成のうち、objectCache 要素のみ以下のように duration を
変更しました。

<objectCache default="Xrm">
  <add
    name="Xrm"
    type="System.Runtime.Caching.MemoryCache, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    instanceMode="PerName"
    absoluteExpiration=""
    slidingExpiration="00:00:00"
    duration="00:00:10"
    priority="Default"
    outputCacheProfileName="Xrm"
    />
< /objectCache>

またサービスコンテキストの生成部分は以下のようにしています。

var xrm = new XrmContext("Xrm");

この場合、プログラムからレコードを追加後、10 秒待つことで最新の情報を
取得することが可能です。

まとめ

SDK では他にもキャッシュのハンドル方法が提供されています。
是非いろいろ試してください。

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