CRM 365在每次调用时都返回CommunicationException

时间:2018-06-19 16:28:02

标签: oauth-2.0 dynamics-crm dynamics-crm-365

我有一个调用CRM 365的服务。验证是通过OAuth响应完成的。承载令牌。这就像一种魅力,但是突然在每个调用上抛出CommunicationException。也许是由于CRM版本更新到了v9。

这是我创建 IOrganizationService 的方式:

var crmProxy = new OrganizationWebProxyClient(serviceUri, false)
                   {
                       HeaderToken = bearerToken
                   };

其中 serviceUri 类似于https://mydomain.crm.dynamics.com/xrmservices/2011/organization.svc/web?SdkClientVersion=9.0.0.0

当我对此代理(例如 ExecuteRequest RetrieveMultiple )进行呼叫时,会抛出 CommunicationException 并显示以下消息:

  

System.ServiceModel.CommunicationException:发出HTTP请求时发生错误   https://mydomain.crm.dynamics.com/xrmservices/2011/organization.svc/web?SdkClientVersion=9.0.0.0。   这可能是由于服务器证书不是   在HTTPS情况下使用HTTP.SYS正确配置。这也可以   由客户端和客户端之间的安全绑定不匹配引起   服务器。 ---> System.Net.WebException:基础连接   已关闭:发送时发生意外错误。 ->   System.IO.IOException:无法从传输读取数据   连接:远程强行关闭了现有连接   主办。 ---> System.Net.Sockets.SocketException:现有连接   被远程主机强行关闭

我已经将CRM SDK程序集更新为9.0.2.4版。仍然无法正常工作。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。

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

tmpRetValue = strstr(fName, extensions[i]);
if(tmpRetValue != NULL && strcmp(tmpRetValue, extensions[i]) == 0)
{
       finalRetValue = extensions[i];
}

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