Oauth 2.0 CRM 365在每次呼叫时返回CommunicationException

Oauth 2.0 CRM 365在每次呼叫时返回CommunicationException,oauth-2.0,dynamics-crm,dynamics-crm-365,Oauth 2.0,Dynamics Crm,Dynamics Crm 365,我有一个叫CRM 365的服务。身份验证是使用OAuth resp完成的。不记名代币。这就像一个符咒,但突然之间,每次通话都会引发一个沟通异常。这可能是因为CRM版本更新到v9 以下是我创建IOrganizationService的方式: 其中serviceUri类似于 当我对此代理(如ExecuteRequest或RetrieveMultiple)进行调用时,将抛出一个带有以下消息的CommunicationException: System.ServiceModel.Communicatio

我有一个叫CRM 365的服务。身份验证是使用OAuth resp完成的。不记名代币。这就像一个符咒,但突然之间,每次通话都会引发一个沟通异常。这可能是因为CRM版本更新到v9

以下是我创建IOrganizationService的方式:

其中serviceUri类似于

当我对此代理(如ExecuteRequest或RetrieveMultiple)进行调用时,将抛出一个带有以下消息的CommunicationException:

System.ServiceModel.CommunicationException:向发出HTTP请求时出错 . 这可能是因为服务器证书不可用 在HTTPS情况下正确配置了HTTP.SYS。这也可能 可能是由于客户端和客户端之间的安全绑定不匹配造成的 服务器。-->System.Net.WebException:基础连接 已关闭:发送时发生意外错误。--> System.IO.IOException:无法从传输读取数据 连接:远程服务器已强制关闭现有连接 主持人。-->System.Net.Sockets.SocketException:现有连接 被远程主机强制关闭

我已经将CRM SDK程序集更新为9.0.2.4版。仍然不起作用

我能做什么?

我找到了解决办法

Dynamics 365 v9.0强制实施TLS 1.2。要在应用程序中实施TLS 1.2,您必须在发出请求之前调用以下命令:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

或者,您可以切换到.Net 4.6或更高版本。在这些版本中,默认为TLS 1.2。

很高兴您找到了解决方案。更好的方法是使用.NET4.6。当CRM要求>TLS 1.2是时,这可以防止将来出现硬编码问题,但由于某些原因,升级到.NET 4.6(甚至升级到.NET 4.7.1)不起作用。。只有将安全协议显式设置为Tls12才能执行此任务。。。
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;