时钟不正确时无法连接





5.00/5 (2投票s)
时钟不正确时无法连接
可能,这篇文章的标题已经很好地概括了问题,但仍然有一些细节值得解释。我正在开发一个 Azure Function 应用,它基本上是在 CRM 和另一个系统之间集成数据。该应用程序的主要功能已经完成并经过测试。两周前,当我休假回来时,我发现我的应用程序,在之前运行良好,现在无法连接到 CRM。我正在使用 Microsoft.Xrm.Tooling
程序集和以下代码,但现在它开始返回 null
public static IOrganizationService GetOrganizationService(ref TraceWriter log)
{
IOrganizationService _orgService = null;
string connectionstring = ConfigurationManager.AppSettings["connectionstring"].ToString();
CrmServiceClient conn = new Microsoft.Xrm.Tooling.Connector.CrmServiceClient(connectionstring);
_orgService = (IOrganizationService)conn.OrganizationWebProxyClient != null
? (IOrganizationService)conn.OrganizationWebProxyClient
: (IOrganizationService)conn.OrganizationServiceProxy;
return _orgService;
}
CrmServiceClient
有两个非常有用的属性 LastCRMError
和 LastCRMException
,它们显示了以下错误消息
无法登录到 Dynamics
CRMOrganizationWebProxyClient
为nullOrganizationServiceProxy
为null
尝试寻找解决方案,并找到了以下建议
- 在连接字符串中,尝试使用组织唯一名称而不是友好名称
- 可能是程序集版本不兼容,或者代码/连接字符串应该以不同的方式编写
- 在连接之前使用
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
但这些方法都没有在我的情况下起作用。我联系了微软支持,他们确认没有可能导致此问题的更新或发布,但好消息是他们仍然愿意提供帮助。
我尝试了不同类型的应用程序、环境和版本,但都没有成功。
最后,在测试以下代码时,错误信息变得更有意义
IServiceManagement orgServiceManagement
= ServiceConfigurationFactory.CreateManagement
(new Uri("https://myCrmInstance.crm5.dynamics.com/XRMServices/2011/Organization.svc"));
AuthenticationCredentials authCredentials = new AuthenticationCredentials();
authCredentials.ClientCredentials.UserName.UserName = "user@email.com";
authCredentials.ClientCredentials.UserName.Password = "*********";
AuthenticationCredentials tokenCredentials = orgServiceManagement.Authenticate(authCredentials);
OrganizationServiceProxy organizationProxy = new OrganizationServiceProxy(orgServiceManagement,
tokenCredentials.SecurityTokenResponse);
Entity contact = new Entity("contact");
contact.Attributes["firstname"] = "Yawer";
contact.Attributes["lastname"] = "Iqbal";
var contactId = organizationProxy.Create(contact)
“安全时间戳无效,因为其创建时间(‘
2018-04-01T12:30:45.790Z
’)在未来。当前时间是‘2018-04-01T12:24:29.185Z
’,允许的时钟偏差是‘00:05:00
’。”
从时间提示中,我发现我的机器时间落后了 6 分钟。是什么导致了时间变化,我仍然不知道,但由于只有 6 分钟的差异,我没有注意到这个变化。我校正了时间,一切都恢复了正常。我想做个小实验,将时钟提前 6 分钟,正如预期的那样,错误不同了
从另一方收到了未安全或未正确保护的错误。请参阅内部
FaultException
以获取错误代码和详细信息。
以及内部异常
在验证消息的安全性时发生错误。
希望分享能节省大家的时间。