![](/img/trans.png)
[英]How to generically get enumerated set of entity records by primary id with Dynamics 365 XRM Tooling SDK
[英]Why use IOrganizationService instead of CrmServiceClient in Dynamics 365 XRM tooling SDK?
用於訪問Dynamics的Microsoft示例代碼通常如下所示:
static void Main(string[] args)
{
try
{
string connectionString =
"Url=https://myorg.crm.dynamics.com; Username=me@myorg.com; Password=******; authtype=Office365";
using (CrmServiceClient conn = new CrmServiceClient(connectionString))
{
// Cast the proxy client to the IOrganizationService interface.
IOrganizationService orgService = (IOrganizationService)conn.OrganizationWebProxyClient ??
conn.OrganizationServiceProxy;
Console.WriteLine("Microsoft Dynamics CRM version {0}.", ((RetrieveVersionResponse)orgService.Execute(new RetrieveVersionRequest())).Version);
}
}
catch (FaultException<OrganizationServiceFault> osFaultException)
{
Console.WriteLine("Fault Exception caught");
Console.WriteLine(osFaultException.Detail.Message);
}
catch (Exception e)
{
Console.WriteLine("Uncaught Exception");
Console.WriteLine(e);
}
}
}
但是同樣可以(並且更簡單)直接使用Crm服務客戶端,如下所示:
class Program
{
static void Main(string[] args)
{
try
{
string connectionString =
"Url=https://myorg.crm.dynamics.com; Username=me@myorg.com; Password=******; authtype=Office365";
using (CrmServiceClient conn = new CrmServiceClient(connectionString))
{
Console.WriteLine("Microsoft Dynamics CRM version {0}.", ((RetrieveVersionResponse)conn.Execute(new RetrieveVersionRequest())).Version);
}
}
catch (FaultException<OrganizationServiceFault> osFaultException)
{
Console.WriteLine("Fault Exception caught");
Console.WriteLine(osFaultException.Detail.Message);
}
catch (Exception e)
{
Console.WriteLine("Uncaught Exception");
Console.WriteLine(e);
}
}
}
我的問題:為什么要使用那個IOrganizationService屬性? 看起來好像它只有CrmServiceClient的一部分功能。 直接使用的CrmServiceClient似乎更快,更簡單,更高效,功能更豐富。
有關為什么示例代碼總是有這個額外的間接層的任何想法?
謝謝。
IOrganizationService
是一個interface
,用於定義訪問所有Dynamics功能所需的最基本方法。 使用接口有許多一般的 好處 。
IOrganizationService
自CRM 2011以來一直存在,而CrmServiceClient
是圍繞CRM 2016引入的。使用IOrganizationService
一個簡單原因是,它已存在很長時間並存在於現有代碼庫中。
CrmServiceClient
實現了IOrganizationService
,還提供了一系列其他方法,例如使用CRM進行身份驗證。 在介紹CrmServiceClient
之前,我們使用CrmConnection
對CRM進行身份驗證。 當我們必須從CrmConnection
遷移到CrmServiceClient
,我們只需要更改為CrmServiceClient
,提取IOrganizationService
,其余的代碼庫保持不變。
對IOrganizationService
接口進行編程使您的代碼更具可移植性和可重用性。 例如; 當您不知道將要創建您的服務對象時。
IOrganizationService orgService = IOrganizationService)conn.OrganizationWebProxyClient ?? conn.OrganizationServiceProxy;
出於測試目的,當您想要使用新的MockOrganizationService
類模擬IOrganizationService
時。
當您想在外部應用程序和插件之間移動代碼時。 在插件中,不提供CrmServiceClient
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.