我正在为运行CRM 2015 On Premise的客户工作,并将CRM服务器更新0.1作为最新的UR。
我一直在报告人们在尝试从系统中的笔记下载附件时遇到错误。所以我开始深入研究,发现事件日志中存在许多问题 - 但是,与我的用户相关的似乎最普遍的问题如下:
事件:18962
Current key (KeyType : CrmWRPCTokenKey) is expired. This can indicate that a key is not being regenerated correctly. Current Key : CrmKey(Id:7b92dc39-f014-e711-9438-00155dfc452d, ScaleGroupId:00000000-0000-0000-0000-000000000000, KeyType:CrmWRPCTokenKey, Expired:True, ValidOn:03/30/2017 02:26:06, ExpiresOn:05/02/2017 02:26:06, CreatedOn:03/30/2017 02:26:06, CreatedBy:NT AUTHORITY\NETWORK SERVICE.
事件1309:
Exception type: CrmException
Exception message: The key specified to compute a hash value is expired, only active keys are valid. Expired Key : CrmKey(Id:7b92dc39-f014-e711-9438-00155dfc452d, ScaleGroupId:00000000-0000-0000-0000-000000000000, KeyType:CrmWRPCTokenKey, Expired:True, ValidOn:03/30/2017 02:26:06, ExpiresOn:05/02/2017 02:26:06, CreatedOn:03/30/2017 02:26:06, CreatedBy:NT AUTHORITY\NETWORK SERVICE.
at Microsoft.Crm.CrmKeyService.ComputeHash(CrmKey key, Guid scaleGroupId, HashParameterBase[] parameters)
at Microsoft.Crm.CrmKeyService.ComputeHash(CrmKey key, HashParameterBase[] parameters)
at Microsoft.Crm.Application.Security.WrpcContext.ComputeWrpcTokenHash(CrmKey key, String actionPageUrl, DateTime timestamp)
at Microsoft.Crm.Application.Security.WrpcContext.ValidateToken()
at Microsoft.Crm.Application.Controls.AppPage.ValidateWrpcContext()
at Microsoft.Crm.Application.Controls.AppPage.OnInit(EventArgs e)
at System.Web.UI.Control.InitRecursive(Control namingContainer)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
我一直在网上搜索,试图弄清楚如何解决这个问题。 “临时”修复是让用户清除IE缓存,然后重启他们的浏览器 - 这似乎有效,大约一个月。然后,当生成下一个密钥时,它们会出现相同的问题。但是,事件查看器中的关键错误始终存在,每20-30分钟左右开始一次。
我尝试了所有常见的嫌疑人:重启异步和异步维护服务。手动停止/启动这些服务。重置IIS。重新启动整个服务器。这些都没有奏效。
然后我开始深入挖掘数据库,试图找出问题所在。他们有一个开发服务器,它没有遇到这些问题。所以我想比较MSCRM_CONFIG数据库和CrmKey表(以及CRMKeyProperties,CRMKeySettings和CRMKeySettingProperties表)中的记录。我看到的有点令人困惑。
在DEV中(再次,对于此错误完全有效 - 它没有出现),只有一个CRMWRPCTokenKey,它是Enabled(Enabled = 1)。有效日期范围符合我的预期(目前有效,月中到期)。
在问题出现的PROD中,有三个CRMWRPCTokenKeys,其中一个已启用,另外两个已禁用。启用的那个具有有效的“有效日期”和“到期日期” - 它应该在昨天生效,并且在5月初之前不会到期。看来这个表(MSCRM_CONFIG.CrmKey)有多个CRMStaticVersionScaleGroupkey记录(2条记录),CRMTicketkey(3条记录),以及CrmWRPCTokenKey(3条记录)。
我确实看到两个CRMWRPCTokenKey记录(包括一个活动记录)是由我的用户帐户创建的,而第三个记录(也是非活动状态)是由网络服务(在prod中)创建的。 DEV中这种类型的唯一记录也是由Network Service创建的。
那么,有没有人对此有永久性的解决方案?为什么我在一个实例中的CRMKey表中有多个相同类型密钥的实例,而不是另一个实例?当我停止/启动异步维护服务时,是否重新生成了该密钥?为什么它不会清理旧密钥,所以系统只有1来查看?