Mac 操作系统、.Net6、C# 10.0。
我总是在 .Net Framework 平台上为 MS Dynamics 365 创建控制台客户端,没有出现任何问题。但现在我需要在.Net Core或更新的平台上做同样的事情(因为我需要稍后将其放入Docker容器中)。在这种情况下我尝试使用.Net6。
我创建了新的控制台应用程序并添加了 NuGet 包:
Microsoft.PowerPlatform.Dataverse.Client
v0.6.6System.Configuration.ConfigurationManager
v6.0.0System.ServiceModel.Primitives
v4.9.0我的简单
Program.cs
文件:
using System.Net;
using System.ServiceModel.Description;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Client;
namespace ConsoleAppExample
{
internal class Program
{
static void Main(string[] args)
{
Console.Title = "CRM console client";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var orgServiceUrl = "http://dev-crm-app02/MyCompany/XRMServices/2011/Organization.svc";
var crmUserLogin = "myLogin";
var crmUserPassword = "myPassword";
var credentials = new ClientCredentials();
credentials.UserName.UserName = crmUserLogin;
credentials.UserName.Password = crmUserPassword;
try
{
using (var orgService = new OrganizationServiceProxy(new Uri(orgServiceUrl),
null, credentials, null))
{
RetrieveVersionRequest versionRequest = new RetrieveVersionRequest();
RetrieveVersionResponse versionResponse =
(RetrieveVersionResponse) orgService.Execute(versionRequest);
WhoAmIRequest whoAmIRequest = new WhoAmIRequest();
WhoAmIResponse whoAmIResponse = (WhoAmIResponse) orgService.Execute(whoAmIRequest);
Console.WriteLine($"\nOrganizationService: {orgServiceUrl}");
Console.WriteLine($"CRM version: {versionResponse.Version}");
Console.WriteLine($"User login: {crmUserLogin}");
Console.WriteLine($"\nOrganizationId: {whoAmIResponse.OrganizationId}");
Console.WriteLine($"BusinessUnitId: {whoAmIResponse.BusinessUnitId}");
Console.WriteLine($"UserId: {whoAmIResponse.UserId}");
}
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(ex.Message); // Xrm.Sdk WSDL
if (ex.InnerException != null)
{
Console.WriteLine(ex.InnerException.Message);
}
Console.ResetColor();
}
Console.WriteLine("\nPress ENTER for exit...");
Console.ReadLine();
}
}
}
但是当我运行我的应用程序时,我收到错误:
Xrm.Sdk WSDL
为什么会出现这种情况以及如何解决?
组织服务客户端已弃用,并且在网络核心上不直接支持。
使用 dataverse serviceclient 连接时,连接字符串或 serviceclient 构造函数是唯一支持的方式。
也就是说,由于底层身份验证堆栈的变化,本地部署并没有得到很好的支持。
当前可能支持的最佳功能是通过带有自定义身份验证处理程序的本地 adfs 使用 oAuth。
dataverse 服务客户端的用户编写了一个扩展,为 net core 添加了 AD 和 WSTrust 支持,但它不是 MS 发行版的一部分。
您可以在 AD onPrem 支持主题下的 dataverse 服务客户端 GitHub 站点问题板上找到该链接 https://github.com/microsoft/PowerPlatform-DataverseServiceClient/issues/110
如果可能,使用 Dataverse 服务客户端从 .NET 6 连接到本地实例。如果您想使用连接字符串进行连接:
如果您使用 ADFS 2016,也可以使用自定义 tokenProviderFunction 进行连接。
配置相当冗长,但在本文中有详细描述:使用 Dataverse Service Client 连接到 OnPrem Dynamics 365 CRM(来自 .NET 6+)以及 github 上的代码示例。