【问题标题】:Which C# OData Client library to use for Dynamics CRM 365 Web Api?哪个 C# OData 客户端库用于 Dynamics CRM 365 Web Api?
【发布时间】:2018-11-05 15:54:36
【问题描述】:

我正在通过它的 OData Web Api 调用 Dynamics 365,我想知道我可以使用哪个客户端库来简化编程。

我的用例是我主要必须使用一个实体:联系人。我想检索一些数据、编辑数据并创建新联系人。我以类似方式使用的另一种实体类型是地址。一个联系人可以有多个地址。

目前我正在使用普通的 HTTP 客户端类与 Dynamics 进行通信。

我正在为 Linux 主机开发一个 .NET Core 应用程序,因此我无法使用 Dynamics CRM SDK (SOAP Endpoint)。

我的问题是您的建议是什么:我应该使用Microsoft.OData.Client 还是Simple.OData.Client?还是其他图书馆?

我尝试使用Microsoft.OData.Client,根据这篇文章生成了一个客户端(proxy/wrapper):https://blogs.msdn.microsoft.com/odatateam/2014/03/11/tutorial-sample-how-to-use-odata-client-code-generator-to-generate-client-side-proxy-class/

问题在于它会生成一个 .cs 文件,文件大小为 86 MB。也许之后使用这个客户端可能是一个解决方案,但是在我们的项目中拥有这么大的源文件似乎是错误的。我想避免它,但我没有找到生成它的选项如果我不小心打开它,Visual Studio 崩溃,智能感知有时会变慢,如果打开 ReSharper VS 会大大减慢等等...

我检查了 Simple.OData.Client 并且似乎有很好的文档和 API。例如:https://github.com/object/Simple.OData.Client/wiki/Retrieving-data

对于 Microsoft.OData.Client,我没有找到如何在不生成整个客户端的情况下以键入方式使用它的文档。那可能吗?我只发现了这个,其中使用了生成的上下文:http://odata.github.io/odata.net/v6/#04-01-basic-crud-operations

我认为使用 Simple.OData.Client 似乎是一个更好的选择,但我更喜欢使用 Microsoft 库。 有什么推荐的吗?

【问题讨论】:

    标签: c# .net-core odata dynamics-crm


    【解决方案1】:

    我刚刚实现了从运行在 Azure 应用服务中的 .Net Core Web 应用到作为 POC 的 Dynamics 365 Web API 的集成。 这包括读取参考数据(连接不同的实体)和使用参考数据列修改实体。

    我发现完整的 OData 接口生成有问题:

    • 找不到支持 OAuth2 授权和 VS2019 的工具
    • 包含导航属性/函数/操作的完整界面定义以及具有所有字段的所有实体变得难以导航,并且 VS 导航缓慢。
    • 根据您要使用的 OData 客户端,它将通过线路发送比需要的更多的信息,并增加不符合底层 REST OData 服务精神的复杂性。
    • 生成的代码工具违反了 C# 编码规则(使用保留关键字,如 event、abstract 以及生成与封闭类型同名的成员),需要手动更正。

    经过大量研究,我开始使用Simple.OData.Client,因为这让我

    • VS2019 / .Net core 兼容工具集 / 运行时
    • 使用 OAuth2 持有者令牌连接到 Dynamics 365 OData Web API
    • 在 VS 中编写类型化代码
    • 只创建我需要的实体模型/导航属性等
    • 只能选择您需要返回的实体属性,而不是 200 个(较小的有效负载)

    您必须自己创建类型化 fluent API 中使用的实体类

    如果您希望 CRM / C# 代码之间的 CRM 实体名称不同,请使用 DataContract 属性。 然后,Simple.OData 将在构成 Http 调用时使用 DataContract 属性。

    不幸的是,当我开始深入研究 OAuth2 授权和导航属性等问题时,我并没有发现文档很有洞察力,但我确实在 github 问题和一些高级教程等二级资源中找到了所有答案 https://www.odata.org/blog/advanced-odata-tutorial-with-simple-odata-client/

    此外,使用 Fiddler 查看来回通信​​对于了解正在发生的事情非常有用。

    【讨论】:

    • 非常感谢您的回答!我一直在努力将 web api 集成到我的项目中!
    • 是否有其他针对 .net5 的项目可用于调用 Dynamics 365 Web API?
    • 刚刚发现Microsoft.AspNetCore.OData 8.x针对.net5
    【解决方案2】:

    Microsoft 推出了 Web API,这是一种 RESTful Web 服务,您可以使用各种平台、编程语言和设备与 Dynamics 365 中的数据进行交互。

    https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/webapi/perform-operations-web-api

    这是一种以编程方式与 Dynamics 365 通信的新方式。

    您可以使用多个库。从下面的文章中,您可以找到这些。

    https://community.dynamics.com/crm/b/briteglobalsolutions/archive/2017/10/22/webapi-library-comparison-in-dynamics-365

    我个人使用过 David Yack 的图书馆。

    https://github.com/davidyack

    希望这会有所帮助。

    【讨论】:

    • 我知道 Web API,我已经在使用它了。我使用的是 C#,而不是像您发送的链接那样的 javascript。我想使用 .net 核心或 .net 标准 C# 库来使 API 的使用更加方便。
    • 你也可以使用 c# 来使用这个 API
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2019-01-03
    相关资源
    最近更新 更多