Configurar el contexto con el archivo de configuración (Dynamics CRM 2015)
Publicado: noviembre de 2016
Se aplica a: Dynamics CRM 2015
Cuando se usan las extensiones para desarrolladores de Microsoft Dynamics CRM 2015, en lugar de ajustar mediante programación la creación de dependencias, es posible influir en los tipos de objeto predeterminados modificando el archivo de configuración de la aplicación. La configuración mínima proporciona únicamente la cadena de conexión y el contexto de datos. Los objetos de dependencia predeterminados se crean internamente, como ocurre cuando se hace mediante programación.
En este tema
Información general
Reglas de configuración
Especificación del atributo instanceMode
Configuración predeterminada
Información general
A continuación se muestra una parte del archivo de configuración predeterminado:
<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>
Se usa CrmConfigurationManager para convertir la configuración en código real. El método CreateContext toma el nombre del elemento de configuración de contexto que se debe usar para crear una instancia del contexto de datos.
var contextName = "Xrm";
using (var context = CrmConfigurationManager.CreateContext(contextName) as XrmServiceContext)
{
}
Si se le pasa null, toma el elemento de configuración de contexto predeterminado, que es el primer elemento de la recopilación. Además, es posible reemplazar esto con un elemento predeterminado explícito. El siguiente código obtiene los mismos resultados que se muestran en el ejemplo anterior.
using (var context = CrmConfigurationManager.CreateContext() as XrmServiceContext)
{
}
El elemento de configuración de contexto es responsable de especificar la cadena de conexión y, de forma predeterminada, busca un nombre de cadena de conexión que coincida con el nombre del elemento de configuración de contexto. El ejemplo anterior busca el nombre "Xrm". El nombre de la cadena de conexión se puede especificar explícitamente para resaltar y aislar esta relación, como se indica a continuación.
<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>
Las dependencias anidadas se pueden especificar y vincular, como se muestra en este ejemplo:
<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>
A continuación se muestra cómo desactivar el almacenamiento en caché:
<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>
Reglas de configuración
A continuación se enumeran las reglas para la configuración del contexto.
Especifique el elemento <context>: no existe una clase de tipos predeterminada para la dependencia OrganizationServiceContext por lo que es necesario especificar el elemento <context/>, a menos que se esté trabajando solo con el CrmOrganizationServiceContext dinámico y sin generación de código.
Opcionalmente especifique el nombre de la dependencia: el atributo del nombre de la dependencia predeterminada (como name= " Xrm") es opcional. Cuando se omite, el primer elemento <add/> de la recopilación de configuración es el predeterminado.
Especifique el atributo de vinculación: con frecuencia se especifica el atributo de vinculación, como serviceName="Xrm", serviceCacheName="Xrm" y objectCacheName="Xrm". Sin embargo, cuando se omite el atributo de vinculación, la clase CrmConfigurationManager intenta vincular con la subdependencia cuyo nombre coincide con la dependencia principal.
Se pueden crear instancias de cualquiera de las dependencias de la configuración con la clase CrmConfigurationManager junto con el método estático adecuado. El objeto resultante se puede convertir en el tipo conocido o se puede hacer referencia a él como tipo base sin conversión.
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;
Especificación del atributo instanceMode
Si un elemento de configuración especifica un atributo InstanceMode, la clase CrmConfigurationManager ajustará su comportamiento de creación de instancias en consecuencia.
Static: siempre devuelve la misma instancia estática.
PerName: devuelve una única instancia de cada elemento de configuración especificado.
PerRequest: devuelve la misma primera instancia en el contexto de una solicitud web, por ejemplo. una instancia para cada instancia de HttpContext.
PerInstance: devuelve una nueva instancia en cada llamada.
Configuración predeterminada
La configuración completa con los valores predeterminados:
<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>
Ver también
Modelo de objetos de contexto de extensiones de desarrollador (Dynamics CRM 2015)
Acceder a relaciones entre entidades (Dynamics CRM 2015)
Adjuntar entidades al contexto (Dynamics CRM 2015)
© 2017 Microsoft. Todos los derechos reservados. Copyright