c# - 为什么在 Dynamics 365 XRM 工具 SDK 中使用 IOrganizationService 而不是 CrmServiceClient?
问题描述
Microsoft 访问 Dynamics 的示例代码通常如下所示:
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 进行身份验证。当我们不得不从 to 迁移时CrmConnection
,CrmServiceClient
我们只需要更改 to CrmServiceClient
, extractIOrganizationService
并且其余代码库保持不变。
对接口进行编程IOrganizationService
使您的代码更具可移植性和可重用性。例如; 当您不知道您的服务对象将被创建时。
IOrganizationService orgService = IOrganizationService)conn.OrganizationWebProxyClient ?? conn.OrganizationServiceProxy;
当您想IOrganizationService
使用新MockOrganizationService
类进行模拟时,出于测试目的。
当您想在外部应用程序和插件之间移动代码时。在插件CrmServiceClient
中未提供。
推荐阅读
- screen-scraping - 无法使用 Puppeteer 单击元素
- javascript - Firestore/Javascript:如何获取以日期命名的文档?
- reactjs - 从 formik-material-ui 1.0 迁移到 2.0
- tensorflow - 颤振包括 tflite 版本显示错误
- ffmpeg - 编译的 FFmpeg 不接受 -c:v 和 -c:a
- ruby-on-rails - 如何使用 minimagick 在 Rails 中调整图像大小和显示图像?
- python - 如何查找元素是否存在?
- sql - 想要生成报告并且需要对数据应用 6-8 个过滤器
- javascript - 查找一个数字是否介于两个值之间,并在升序数组中输出较大的值
- javascript - 如何解析嵌套的 JSON 对象数组?