前言

本文使用的是 ClientSecret 授权方式在 控制台应用(.NET Framework) 项目连接 Dynamics CRM。

其实 Microsoft.Xrm.Tooling.Connector 提供了多种授权方式,但就本人项目经验来说,经常使用的应该是以下两种:Office365ClientSecret

  • 授权方式
NameValueDescription
InvalidConnection-1Invalid connection
AD0Active Directory Auth
Live1Live Auth
IFD2SPLA Auth
Claims3CLAIMS based Auth
Office3654Office365 base login process
OAuth5OAuth based Auth
Certificate6Certificate based Auth
ClientSecret7Client Id + Secret Auth type.
ExternalTokenManagement99Enabled Host to manage Auth token for CRM connections.

如果你想使用 Office365 授权方式进行连接,请移步到这篇文章:

Dynamics CRM - 使用 Console App 连接 CRM —— Office365 AuthType

获取 ClientId 和 ClientSecret

ClientSecret 是一个密码性质的秘钥,可以有效防止未经授权的访问。相比使用用户名和密码,ClientSecret 可以提供更加安全的身份验证方式,降低数据泄露的风险。

先决条件
参考本文步骤获取 ClientSecret ,使用的必须是 “管理员” 用户,否则无法访问 Azure Active Directory 门户。

注册 “应用”

访问 https://portal.azure.cn

提示
如果你是 Global 版,请访问 https://portal.azure.com

在顶部的搜索框,搜索 “ 应用注册 ” 并点击它

点击 “新注册”

弹出的页面 –> 输入一个有意义的应用程序名称 –> 勾选受支持的账号类型 –> 点击 “注册” 按钮

注册成功后,从概览中,你可以找到 应用程序 ID (ClientId) , 把它拷贝到记事本,一会要用。

添加 “证书和密码”

菜单栏选择 “证书和密码” –> 客户端密码 –> “ + 新客户端密码 ” –> 在弹出的页面填写有意义的说明 –> 勾选截止日期 –> 点击 “添加按钮”

如果一切顺利,你将看到下面截图中的 “ 值 ” (这个就是 ClientSecret ) ,请把它拷贝到记事本,一会要用。

提示

页面刷新后这个 “ 值 (ClientSecret)” 会加密,如果你没有及时拷贝,可以将它删除,然后重新创建。

添加 “应用程序用户”

登录 “Power Platform 管理中心” –> 选择环境 –> 点击 “设置”

选择 “应用程序用户” ->

在顶部菜单栏中选择 “ + 新建应用用户 ” –> 选择 “应用” (上面我们创建的 Example-GetClientSecret) –> 选择业务部门 –> 安全角色选择系统管理员 –> 点击 “创建” 按钮

ClientIdClientSecret 已经准备就绪,接下来为创建项目。

搭建项目

新建项目

打开 Visual Studio 并创建一个新的 控制台应用(.NET Framework) 项目

输入一个有意义的项目名称 –> 选择框架后 –> 单击 “创建”

项目已经准备就绪,接下来为项目添加依赖包。

添加依赖包

需要添加两个依赖包:

  1. Microsoft.CrmSdk.CoreAssemblies
  2. System.Configuration.ConfigurationManage

右键单击你的项目 –> 管理 NuGet 程序包

在新窗口中,选择 “浏览” 选项卡并搜索 Microsoft.CrmSdk.CoreAssemblies

在结果中,选择 Microsoft.CrmSdk.CoreAssemblies 并在右侧单击 安装 按钮,在弹出的窗口中点击 “接受”。

现在 Microsoft.CrmSdk.CoreAssemblies 依赖包已经安装好了,接下来对 System.Configuration.ConfigurationManage 执行同样的操作。

下一步将添加代码访问 CRM

添加代码

App.config

App.config 添加连接信息(connectionStrings),将以下信息替换为你的信息

No.参数说明
1urlofyourdynamics365instance访问系统的URL,例:https://xxx.crm.dynamics.com
2yourClientId你的 ClientId
3yourClientSecret你的 ClientSecret
<connectionStrings>
    <!-- Dev 环境(ClientSecret 授权方式) -->
    <add name="Dev-ClientSecret" connectionString="Url=urlofyourdynamics365instance;AuthType=ClientSecret;ClientId=yourClientId;ClientSecret=yourClientSecret;" />
</connectionStrings>

Program.cs

将顶部的 using 替换为以下内容:

using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Tooling.Connector;
using System;
using System.Configuration;

在 Main 方法中,添加以下代码

// string connectionStr = ConfigurationManager.ConnectionStrings["Dev-Office365"].ConnectionString;
string connectionStr = ConfigurationManager.ConnectionStrings["Dev-ClientSecret"].ConnectionString;
CrmServiceClient client = new CrmServiceClient(connectionStr);
if (client.IsReady)
{
    IOrganizationService orgServiceorgService = client;
    // 使用 WhoAmI 进行测试
    WhoAmIResponse resTest = (WhoAmIResponse)orgServiceorgService.Execute(new WhoAmIRequest());
    Console.Write($"UserId: {resTest.UserId}");
    Console.Read();
}
else
{
    throw new Exception(client.LastCrmError);
}

测试

右键单击你的项目 –> 设为启动项目

使用 F5 或 点击顶部的 启动 按钮来执行程序

如果一切正常,将打印用户的Id,接下来你可以尝试 CRUD 操作了。