用于Dynamics CRM 365 Web Api的C#OData客户端库



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

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

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

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

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

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

问题是它生成了一个文件大小为86 MB的.cs文件。也许以后使用这个客户端可能是一个解决方案,但在我们的项目中有这么大的源文件似乎是错误的。我想避免它,但我没有找到生成它的选项。如果我不小心打开它,Visual Studio崩溃,intellisense有时会变慢,如果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基本积垢操作

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

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

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

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

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

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

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

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

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

同样,使用Fiddler来查看来回的通信对于理解正在发生的事情是非常有用的

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

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

这是一种以编程方式与Dynamics365进行通信的新方式。

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

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

我曾亲自使用过大卫·亚克的图书馆。

https://github.com/davidyack

希望这能有所帮助。

最新更新