用于访问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 Service Client(并且更简单),如下所示:
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函数所需的最基本方法。有许多general可以使用benefits接口(interface)。IOrganizationService
自CRM 2011开始问世,而CrmServiceClient
在CRM 2016前后引入。使用IOrganizationService
的一个简单原因是它的存在时间已经更长了,并且存在于现有的代码库中。CrmServiceClient
实现IOrganizationService
,并且还提供了一系列其他方法,例如使用CRM进行身份验证。在介绍CrmServiceClient
之前,我们使用CrmConnection
对CRM进行身份验证。当我们不得不从CrmConnection
迁移到CrmServiceClient
时,我们只需要更改为CrmServiceClient
,提取IOrganizationService
即可,其余代码库保持不变。
通过对IOrganizationService
接口(interface)进行编程,可以使您的代码更具可移植性和可重用性。例如;当您不知道将要创建服务对象时。
IOrganizationService orgService = IOrganizationService)conn.OrganizationWebProxyClient ?? conn.OrganizationServiceProxy;
当您想使用新的
IOrganizationService
类模拟MockOrganizationService
时,出于测试目的。当您想在外部应用程序和插件之间移动代码时。在插件中未提供
CrmServiceClient
。