ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

为什么在Dynamics 365 XRM工具SDK中使用IOrganizationService而不是CrmServiceClient?

2019-11-08 10:06:30  阅读:526  来源: 互联网

标签:dynamics-crm dynamics-crm-365 c net


用于访问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是一个接口,用于定义访问所有Dynamics函数所需的最基本方法.使用接口的数量为general benefits.

自从CRM 2011开始,IOrganizationService就已经存在,而在CRM 2016左右就引入了CrmServiceClient.使用IOrganizationService的一个简单原因是它的存在时间已经更长了,并且存在于现有的代码库中.

CrmServiceClient实现IOrganizationService,还提供了一系列其他方法,例如通过CRM进行身份验证.在引入CrmServiceClient之前,我们使用CrmConnection对CRM进行身份验证.当我们必须从CrmConnection迁移到CrmServiceClient时,我们只需要更改为CrmServiceClient,提取IOrganizationService,其余代码库保持不变.

对IOrganizationService接口的编程使您的代码更可移植,并且可重复使用.例如;当您不知道将要创建服务对象时.

IOrganizationService orgService = IOrganizationService)conn.OrganizationWebProxyClient ?? conn.OrganizationServiceProxy;

当您想使用新的MockOrganizationService类模拟IOrganizationService时,出于测试目的.

当您想在外部应用程序和插件之间移动代码时.在插件中未提供CrmServiceClient.

标签:dynamics-crm,dynamics-crm-365,c,net
来源: https://codeday.me/bug/20191108/2007176.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有