microsoft / PowerPlatform-DataverseServiceClient

Code Replica for Microsoft.PowerPlatform.Dataverse.Client and supporting nuget packages.
MIT License
281 stars 51 forks source link

ServiceClient is only communicating with OrgSvc #405

Closed SweetsNSavories closed 12 months ago

SweetsNSavories commented 1 year ago

I always thought the whole purpose of serviceClient over crmServiceClient is not only to be used with .net core but also to be able communicate natively with Dataverse WebAPI endpoint using our c# SDK client without those hand woven httpClient requests.

However, when I test with UseWebApi = true; still it hits OrgSvc with soap formatted messages. I kind of remember it use to work with webapi default, we had the issue of cloned serviceClient downloading metadata on every cloned call.. not sure what changed now. Does anyone have idea on how to force WebAPI endpoint with odata json formatted messages if not with UseWebApi=true assignment.

image

MattB-msft commented 12 months ago

Thanks for your feedback here. We have moved away from that at this point as it's become clear that we cannot provide a parity, performant (memory and speed) equivalent of the Organization API over the WebAPI.

This is rooted in that the WebAPI is required to comply with the OData 4 specification which uses a very different format and structure from the Organization API. While we manage the conversion between Odata4 and Organization API (the native API of the platform) on the server, replicating that logic in the DVSC became a process of diminishing returns.

Thus, we have moved away from utilizing the WebAPI as a primary path in the Dataverse Service Client. Though we do use it for some operations where it makes more sense / it's more efficient to use it. We also expose a means for you to use it directly while leveraging DVSC's auth, retry and throttling support.

As stated in public docs, the SOAP protocol is deprecated, and eventually will be locked down from external use. The API endpoint itself is being re-termed as the "Organization API Endpoint".
At some point in the future we will block access to that endpoint from any client other than Dataverse ServiceClient or CrmServiceClient.

This gives us flexibility to swap out the underlying protocols when it makes sense to do so without disrupting code written to the Organization API as exposed via the Dataverse Service Client.

thanks. MattB.