访问 DataVerse 数据并通过 .NET 6 上的 C# 代码对其运行 SQL 语句(Azure 函数)

问题描述 投票:0回答:2

我正在云中使用 Dynamics365 CE。我正在尝试运行一些作为 SQL 脚本构建的相当复杂的查询(使用 XrmToolBox 的出色的“SQL-4-CDS”插件)。

现在我知道我可以通过 TDS 端点连接到 Dataverse 数据存储(如果启用 - 在我的情况下),并且从 SSMS 可以正常工作:

Server Name    = myorg.crm4.dynamics.com,5558
Authentication = Azure Active Directory - Password
User Name      = my company e-mail

我可以连接到 Dataverse,并运行我的查询 - 一切都很棒。

现在我想对我正在编写的 C# 代码(在 .NET 6 上运行)执行相同的操作,最终应该成为一个 Azure 函数 - 所以它是一个“服务器到服务器”,后面-场景,没有交互式登录上下文类型的场景。

可以使用此连接字符串通过TDS端点连接到Dataverse - 只要我以交互方式运行应用程序 - 就像我一样,在我的用户上下文中:

Server=myorg.crm4.dynamics.com,5558;Authentication=Active Directory Password;Database=my_dbname;User Id=my_email;Password=my_pwd;

但是 - 这不适用于服务器到服务器的“守护进程”式设置。

由于我使用 .NET 6(用于 Azure 函数),并且由于我想运行一些自定义 SQL 语句,因此我不能使用“CRM XRM 客户端”工具(带有

IOrganizationService
类) - 我需要直接使用 ADO.NET - 我是否可以定义一个 ADO.NET 兼容的连接字符串,它将使用客户端 ID 和客户端密钥(我都可以使用)?

我已经为

Authentication=......
设置尝试了很多值 - 但到目前为止没有一个有效。我可以在哪里找到此连接字符串参数支持的值的完整列表?

感谢您的帮助或指点!

c# azure-functions .net-6.0 dynamics-365 dataverse
2个回答
2
投票

我知道这是一个老问题,但以防万一它对任何人仍然有帮助:您应该能够使用

SqlConnection.AccessToken
属性来授权您与 TDS 端点的连接。要获取访问令牌,您需要使用应用程序用户客户端 ID 和密钥来获取令牌。

您还可以使用 SQL 4 CDS ADO.NET 提供程序 - 从 Dataverse SDK 创建

ServiceClient
后,将其传递给
Sql4CdsConnection
构造函数:

using var con = new Sql4CdsConnection(service);
using var cmd = con.CreateCommand();
cmd.CommandText = "SELECT ...";

0
投票

OP 没有说明为什么或如何交互地为他们工作,但我猜测这是因为他们能够输入一些额外的详细信息来满足 MFA 要求。 我建议尝试以非交互方式使用相同的连接字符串,但使用已从 MFA 要求中排除的登录名。 (TDS端点文档说只有Azure Active Directory身份验证有效......[更新]但clientsecret肯定可以通过代码工作,并且您不需要其他答案中提到的额外的Sql4Cds类。当我查看代码时它只是连接这样的东西:

using (SqlConnection sqlConn = new SqlConnection("server=" + crmConnection.CrmConnectOrgUriActual.Host))
          {
             sqlConn.AccessToken = crmConnection.CurrentAccessToken;
             sqlConn.Open();

仅供参考,我尝试使用应用程序密码通过 SSMS 进行连接,但没有成功。)

© www.soinside.com 2019 - 2024. All rights reserved.