簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM