我创建了一个控制台应用程序,它连接到CRM并更新XYZ实体中的字段。
连接到CRM的代码是 -
ClientCredentials credential = new ClientCredentials();
credential.UserName.UserName =user;
credential.UserName.Password = password;
OrganizationServiceProxy proxy = new OrganizationServiceProxy(new Uri(crmEnvironments.ElementAt(currentEnvironment).URL), null, credential, null);
它最初很好地连接到CRM,但在某个时候它会抛出下面提到的错误 -
"元数据包含无法解析的引用"。
内部异常:"无法连接到远程服务器"
在谷歌做了一些研究后,我做了以下事情
在Connect CRM中插入以下代码行 -
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain,SslPolicyErrors sslPolicyErrors) { return true; };
在Appconfig文件中插入以下内容 -
<system.net>
<defaultProxy useDefaultCredentials="true">
</defaultProxy>
</system.net>
但是,错误仍然存在,处理完一些记录后连接失败并抛出上述错误。
请帮忙。
答案 0 :(得分:0)
您有什么样的部署?是OnPremise使用Active Directory还是IFD?
只是说因为你只需要ServerCertificateValidationCallback,如果您通过SSL使用自签名证书托管CRM,而您实际上正在使用上述方法绕过该证书。
如果它处理某些记录然后停止,那么我敢打赌ServerCertificateValidationCallback与此无关。例如,可能是CRM因为超出了超时而丢弃了连接。
您可以在CRM的web.config中增加OrganisationService超时。
查看更多详情here
如果可能的话,另一个更好的选择是将你的个人调用包装成ExecuteMultipleRequest,这样你就不会对服务进行N次调用,只需要一个大的调用(它将节省网络带宽和连接问题)。
答案 1 :(得分:0)
连接控制台应用程序的另一种方法是CrmServiceClient,它位于Microsoft.Xrm.Tooling.Connector库中。
使用NuGet,您可以获得Microsoft.CrmSdk.XrmTooling.CoreAssembly套餐,并且您将参加比赛。
以下是其他一些有用的链接:
Build Windows client applications using the XRM tools
Sample: Quick start for XRM Tooling API
以下是各种连接字符串示例:
CRM 2016和Dynamics 365在线:
<add name="dev26" connectionString="Url=https://dev26.crm.dynamics.com; Username=user@dev26.onmicrosoft.com; Password=Pass; AuthType=Office365" />
内部集成安全性:
<add name="prod" connectionString="Url=http://myserver/AdventureWorksCycle;"/>
凭证的内部部署:
<add name="prod" connectionString="Url=http://myserver/AdventureWorksCycle; Domain=mydomain; Username=administrator; Password=password; AuthType=AD;"/>
CRM 2016之前的内部IFD:
<add name="prod" connectionString="Url=https://contoso.litware.com; Username=someone@litware.com; Password=password; AuthType=IFD;"/>
CRM 2016及更高版本的内部部署IFD(v8.0 +)
<add name="prod" connectionString="ServiceUri=https://contoso.litware.com/contoso; Domain=contoso; Username=contoso\administrator; Password=password; AuthType=IFD; LoginPrompt=Never;" />
答案 2 :(得分:0)
我知道问这个问题已有几年了;但我今天遇到了这个问题,试图连接到CRM 365 Online。
我在尝试连接时遇到了一个空对象错误 - 原因是我没有在app.config文件中配置我的代理凭据。