構成ファイルを使用したコンテキストの構成

 

対象: Dynamics CRM 2015

Developer Extensions for Microsoft Dynamics CRM 2015 を使用する際には、依存コンポジションをプログラムによって調整する代わりに、アプリケーション構成ファイルを変更することで既定のオブジェクトの種類に影響を及ぼすことができます。 最小の構成では、接続文字列とデータ コンテキストだけが提供されます。 既定の依存オブジェクトは、プログラム経由の場合と同様に内部で作成されます。

次に示すのは、既定の構成ファイルの一部です。

<configuration>

 <configSections>
  <section name="microsoft.xrm.client" type="Microsoft.Xrm.Client.Configuration.CrmSection, Microsoft.Xrm.Client"/>
 </configSections>

 <connectionStrings>
  <add name="Xrm" connectionString="Url=http://crm.contoso.com/xrmContoso"/>
 </connectionStrings>

 <microsoft.xrm.client>
  <contexts>
   <add name="Xrm" type="Xrm.XrmServiceContext, Xrm"/>
  </contexts>
 </microsoft.xrm.client>

</configuration>

CrmConfigurationManager は、構成を実際のコード内に反映させるために使用されます。CreateContext メソッドは、データ コンテキストをインスタンス化するために使用されるコンテキスト構成要素の名前を取得します。

var contextName = "Xrm";
using (var context = CrmConfigurationManager.CreateContext(contextName) as XrmServiceContext)
{
}

null を渡すことで、既定のコンテキスト構成要素 (コレクション内の最初の要素) が取得されます。 また、明示的な既定要素によってこれを上書きすることもできます。 次のコードは、先の例に示したのと同じ結果を取得します。

using (var context = CrmConfigurationManager.CreateContext() as XrmServiceContext)
{
}

コンテキスト構成要素は、接続文字列の指定に関与し、既定では、コンテキスト構成要素名と同じ名前を持つ接続文字列名を検索します。 上の例では、名前 "Xrm" で一致しています。 接続文字列名を明示的に指定して、その関係を強調および分離することもできます。次に例を示します。

<connectionStrings>
 <add name="MyCRM" connectionString="Url=http://crm.contoso.com/xrmContoso"/>
</connectionStrings>

<microsoft.xrm.client>
 <contexts>
  <add name="Xrm" type="Xrm.XrmServiceContext, Xrm" connectionStringName="MyCRM"/>
 </contexts>
</microsoft.xrm.client>

入れ子になった依存性を指定して、一緒にリンクすることもできます。次に例を示します。

<microsoft.xrm.client>
 <contexts>
  <add name="Xrm" type="Xrm.XrmServiceContext, Xrm" serviceName="MyService"/>
 </contexts>
 <services>
  <add name="MyService" type="Microsoft.Xrm.Client.Services.CachedOrganizationService, Microsoft.Xrm.Client" serviceCacheName="MyServiceCache"/>
 </services>
 <serviceCache>
  <add name="MyServiceCache" type="Microsoft.Xrm.Client.Services.OrganizationServiceCache, Microsoft.Xrm.Client" objectCacheName="MyObjectCache"/>
 </serviceCache>
 <objectCache>
  <add name="MyObjectCache" type="System.Runtime.Caching.MemoryCache, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
 </objectCache>
</microsoft.xrm.client>

次に示すのは、キャッシングを無効化する方法です。

<microsoft.xrm.client>
  <contexts>
   <add name="Xrm" type="Xrm.XrmServiceContext, Xrm" serviceName="Xrm"/>
  </contexts>
  <services>
   <add name="Xrm" type="Microsoft.Xrm.Client.Services.OrganizationService, Microsoft.Xrm.Client"/>
  </services>
</microsoft.xrm.client>

次の一覧に、コンテキストの構成に関するルールを示します。

  • <context> 要素を指定する - OrganizationServiceContext の依存性には既定の種類クラスがないため、<context/> 要素を指定する必要があります。ただし、動的な CrmOrganizationServiceContext のみを使用し、コード生成なしで作業している場合は例外です。

  • オプションで、依存名を指定する - 既定の依存名属性 (name="Xrm" など) は、必要に応じて指定します。 省略した場合は、構成コレクション下の最初の <add/> 要素が既定となります。

  • リンク属性を指定する – 通常は、serviceName="Xrm"serviceCacheName="Xrm"objectCacheName="Xrm" などのリンク属性を指定します。 ただし、リンク属性を省略した場合、CrmConfigurationManager は親依存性と同じ名前のサブ依存性にリンクしようとします。

構成から取得されたすべての依存性は、適切な静的メソッドとともに、CrmConfigurationManager によってインスタンス化できます。 結果として生成されたオブジェクトは、既知の種類にキャストされるか、またはキャストされずにベース タイプとして参照されます。

var name = "Xrm";
var connection = new CrmConnection(name);
var objectCache = CrmConfigurationManager.CreateObjectCache(name) as MemoryCache;
var serviceCache = CrmConfigurationManager.CreateServiceCache(name, connection) as OrganizationServiceCache;
var service = CrmConfigurationManager.CreateService(connection, name) as CachedOrganizationService;
var context = CrmConfigurationManager.CreateContext(name) as XrmServiceContext;

構成要素が InstanceMode 属性を指定した場合、CrmConfigurationManager はそのインスタンス化動作を適切に調整します。

  • Static – 常に同じ静的インスタンスを返します。

  • PerName– 指定された構成要素ごとに単一のインスタンスを返します。

  • PerRequest – たとえば、Web リクエストのコンテキスト内で同一の最初のインスタンスを返します。HttpContext インスタンスごとに 1 つのインスタンスを返します。

  • PerInstance – 呼び出しごとに新しいインスタンスを返します。

次に示すのは、既定値を使用した場合の構成の全内容です。

<configuration>

 <configSections>
  <section name="microsoft.xrm.client" type="Microsoft.Xrm.Client.Configuration.CrmSection, Microsoft.Xrm.Client"/>
 </configSections>

 <connectionStrings>
  <add name="Xrm" connectionString="ServiceUri=...; Domain=...; Username=...; Password=..."/>
 </connectionStrings>

 <microsoft.xrm.client>
  <contexts default="Xrm">
   <add name="Xrm" type="Xrm.XrmServiceContext, Xrm" connectionStringName="Xrm" serviceName="Xrm"/>
  </contexts>
  <services default="Xrm">
   <add
    name="Xrm"
    type="Microsoft.Xrm.Client.Services.CachedOrganizationService, Microsoft.Xrm.Client"
    serviceCacheName="Xrm"
    instanceMode="PerRequest" [Static | PerName | PerRequest | PerInstance]
   />
  </services>
  <serviceCache default="Xrm">
   <add
    name="Xrm"
    type="Microsoft.Xrm.Client.Services.OrganizationServiceCache, Microsoft.Xrm.Client"
    objectCacheName="Xrm"
    cacheMode="LookupAndInsert" [LookupAndInsert | InsertOnly | Disabled]
    returnMode="Cloned" [Shared | Cloned]
    queryHashingEnabled="false" [false | true]
   />
  </serviceCache>
  <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" [Static | PerName | PerInstance]
    absoluteExpiration=""
    slidingExpiration="00:00:00" [HH:MM:SS]
    duration="00:00:00" [HH:MM:SS]
    priority="Default" [Default | NotRemovable]
    outputCacheProfileName="Xrm"
   />
  </objectCache>
 </microsoft.xrm.client>

 <system.runtime.caching>
  <memoryCache>
   <namedCaches>
    <add name="Xrm"
     cacheMemoryLimitMegabytes="0"
     physicalMemoryLimitPercentage="0"
     pollingInterval="00:00:00" />
    </namedCaches>
   </memoryCache>
 </system.runtime.caching>

 <system.web>
  <caching>
   <outputCacheSettings>
    <outputCacheProfiles>
     <add name="Xrm" enabled="true" duration="-1"/>
    </outputCacheProfiles>
   </outputCacheSettings>
  </caching>
 </system.web>

</configuration>

© 2016 Microsoft. All rights reserved. 著作権

コミュニティの追加

表示: