我们需要从c#
.Net framework 4.5.2
年开发的应用程序从Dynamics客户参与中检索数据。我们知道,对于动态Web API v9.0,需要.Net framework 4.6.2
或更高版本。我们需要知道的是,是否有任何方法可以使用我们的应用程序要求(可能使用另一个 API 版本(从动态客户参与查询数据,因为我们不能出于其他原因更改我们的.Net
版本。我们也感谢帮助找到一些文档。
我们尝试使用HttpClient
进行 API 调用。问题出在使用Microsoft.IdentityModel.Clients.ActiveDirectory
的身份验证步骤中。
最可能的原因是您使用的 TLS 版本。TLS 1.2 是 Dynamics 365 所必需的。
.Net Framework 通过以下方式支持 TLS。
.Net Framework 4.0
仅支持TLS 1.0
.Net Framework 4.5
支持TLS 1.2
,但只能通过显式设置 TLS 版本。(请参阅下面的代码示例(.Net Framework 4.6
及以上原生支持TLS 1.2
。
如果强制使用.Net Framework 4.5
请在发出任何 HTTP 请求之前添加以下代码行。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
如果代码更改不是一个选项,则另一种方法是使用 PowerShell 脚本更新注册表项。这必须在运行该应用程序的每个设备上完成。(但是,Azure 可能会带来问题(。
64 位
Set-ItemProperty -Path 'HKLM:SOFTWAREWow6432NodeMicrosoft.NetFrameworkv4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
32 位
Set-ItemProperty -Path 'HKLM:SOFTWAREMicrosoft.NetFrameworkv4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
第一种选择是迄今为止最简单的方法。