개발자 확장 컨텍스트 개체 모델(Dynamics CRM 2015)
게시 날짜: 2016년 11월
적용 대상: Dynamics CRM 2015
Microsoft Dynamics CRM 2015용 개발자 확장은 시작 및 실행하는 데 필요한 작업을 최소화하는 일련의 상호 종속 클래스를 제공합니다. 가장 기본적인 프로그램에는 연결 문자열(또는 app.config에서 연결 문자열의 이름)과 다음 예제와 같이 CrmSvcUtil.exe에서 만든 데이터 컨텍스트만 필요합니다.
var connection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var context = new XrmServiceContext(connection))
{
var accounts = context.AccountSet;
foreach (var account in accounts)
Console.WriteLine(account.Name);
}
고급 설정에서 하위 수준 작업을 처리하는 중첩된 개체가 있습니다. 데이터 컨텍스트는 이러한 모든 개체의 구성이므로 데이터 컨텍스트의 동작은 개체에 따라 다릅니다. 특정 생성자를 사용하여 이러한 종속성을 노출할 수 있습니다. 확장되면 기본 개체 구성은 다음 예제와 같습니다.
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
var myObjectCache = MemoryCache.Default;
var myServiceCache = new OrganizationServiceCache(myObjectCache, myConnection);
using (var myService = new CachedOrganizationService(myConnection, myServiceCache))
using (var myContext = new XrmServiceContext(myService))
{
}
종속성
다음 표에는 사용 가능한 종속성과 해당 동작이 나와 있습니다.
인터페이스 |
기본 클래스 |
기본 유형 |
설명 |
구성 요소 |
---|---|---|---|---|
CrmConnection |
CrmConnection |
연결 문자열 양식의 연결 정보입니다. |
<connectionStrings> |
|
ObjectCache |
MemoryCache |
SDK의 다른 구성 요소에 종속되지 않는 원시 데이터 캐싱 서비스입니다. |
<objectCache> |
|
IOrganizationServiceCache |
OrganizationServiceCache |
OrganizationServiceCache |
IOrganizationService 작업의 결과를 캐시하는 추가 추상 데이터 캐싱 서비스입니다. 자동으로 캐시 항목 종속성을 설정하고 업데이트 작업을 수행하면 종속 캐시 항목을 무효화합니다. |
<serviceCache> |
IOrganizationService |
OrganizationService |
CachedOrganizationService |
OrganizationServiceProxy 또는 임의의 IOrganizationService 개체 설정에 대한 정보를 관리하는 IOrganizationService입니다.OrganizationServiceCache 개체와 쌍을 이루면 캐시된 서비스가 됩니다. |
<services> |
OrganizationServiceContext |
OData 및 LINQ 가능 데이터 컨텍스트입니다. 기본 유형이 없도록 특별히 선언하거나 구성해야 합니다. |
<contexts> |
||
IDiscoveryService |
DiscoveryService |
DiscoveryServiceProxy 또는 임의의 IDiscoveryService 개체 설정에 대한 정보를 관리하는 IDiscoveryService입니다. 이 항목에 대해 캐싱 구현이 없으므로 app.config에서 구성할 수 없습니다. |
인터페이스 구현, 사용할 수 있는 기본 클래스를 상속 또는 단순히 개체 중첩 다시 정렬 등은 마지막 동작을 수정하여 수행할 수 있습니다. 예를 들어 캐싱 기능을 비활성화하는 한 가지 방법은 캐시 관련 개체를 생략하고 원시 기본 클래스를 선택하는 것입니다.
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myService = new OrganizationService(myConnection))
using (var myContext = new XrmServiceContext(myService))
{
}
동적 코드를 위해 CrmSvcUtil.exe에서 생성된 코드에서 종속성을 제거하려면 CrmOrganizationServiceContext 클래스를 사용합니다. 다른 시나리오는 데이터 컨텍스트를 완전히 생략하고 IOrganizationService를 직접 호출합니다. 이것도 IDiscoveryService를 호출하는 방법입니다.
var myConnection = CrmConnection.Parse("Url=http://crm.contoso.com/xrmContoso");
using (var myContext = new CrmOrganizationServiceContext(myConnection))
{
}
using (var myService = new OrganizationService(myConnection))
{
var response = myService.Execute(new WhoAmIRequest()));
}
var discoveryConnection = CrmConnection.Parse("Url=http://crm.contoso.com");
using (var myDiscoveryService = new DiscoveryService(discoveryConnection))
{
var response = myDiscoveryService.Execute(new RetrieveOrganizationsRequest()));
}
컨텍스트 향상
XrmServiceContext의 직접 기본 클래스인 CrmOrganizationServiceContext, Microsoft Dynamics 365용 개발자 확장 및 핵심 SDK의 기본 OrganizationServiceContext는 IUpdatable 및 IExpandProvider 인터페이스의 구현입니다. 이 사용자 지정 구현을 통해 생성된 데이터 컨텍스트 및 데이터 컨텍스트는 생성된 엔터티 개체에서 WCF 데이터 서비스 프레임워크에 참여할 수 있습니다. 데이터 컨텍스트를 OData 끝점으로 제공하려면 새 WCF 데이터 서비스 끝점(.svc)을 기존 웹 응용 프로그램에 추가합니다.
<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="MySite.MyContext" %>
다음은 개발에 사용할 수 있는 서비스 끝점 코드 숨김(.svc.cs) 예제입니다.XrmServiceContext를 DataService<T> 클래스의 일반 유형 매개 변수로 지정합니다.
using System.Data.Services;
using System.Data.Services.Common;
using System.ServiceModel;
using Xrm;
namespace MySite
{
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyContext : DataService<XrmServiceContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// Set rules to indicate which entity sets and service operations are visible, updatable, etc.
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
}
참고 항목
Microsoft Dynamics CRM 2015용 개발자 확장
구성 파일로 컨텍스트 구성(Dynamics CRM 2015)
엔터티 관계 액세스(Dynamics CRM 2015)
컨텍스트에 엔터티 연결(Dynamics CRM 2015)
Dynamics CRM 2015용 포털 연습
© 2017 Microsoft. All rights reserved. 저작권 정보