我有一个调用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版。仍然无法正常工作。
我该怎么办?
答案 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。