用户的内部消息队列证书不存在(无内部用户证书)



我正在创建一个基于web的解决方案(MVC/C#),将消息放置在MSMQ公共队列上。我目前正在一个开发服务器上进行测试,我是该服务器的管理员。

web服务器是一个单独的服务器,启用了WindowsAuthentication和ASP.NET模拟,并禁用了匿名身份验证。

服务器上的应用程序池正在域帐户下运行。该帐户已用于登录服务器,因此已在计算机上生成证书(参考:John Breakwell的博客和此StackOverflow解决方案)

我已使用以下MSMQ安装选项安装MSMQ我创建了一个公共队列,它是事务性的和经过身份验证的,经过身份验证用户和域帐户都可以完全控制

在Visual Studio中以调试模式运行(但使用相同的消息队列)时,会成功发送消息。

但是,当我使用浏览器导航到网站并执行应发送消息的操作时,该过程失败。队列检索正确;失败发生在发送事务性消息时。


我已尝试续订内部证书(在消息队列属性中),该证书将错误消息更改为:Cryptographic function has failed(CorruptedSecurityData)。使用服务帐户登录服务器时,错误消息将返回到原始状态。

我已经尝试更改消息队列权限,以便"Everyone"one_answers"ANONYMOUS LOGON"以及我的个人域帐户拥有完全控制权,并且身份验证被删除。

编辑#1

确保队列和发送消息属性都包括对FullReachQueue的确认,并且在设置了上述权限的情况下,事件日志:{Applications and Service Logs,Microsoft,Windows,MSMQ,End2End}显示两个新条目:

Message with ID CN=msmq,CN=TDBDEV,OU=Hosted Servers,OU=Member Servers,DC=npfit,DC=nhs,DC=uk8194 was sent to queue PUBLIC=e50ae2b5-25ce-447d-96ea-9ec4c9de3d48
Message with ID CN=msmq,CN=TDBDEV,OU=Hosted Servers,OU=Member Servers,DC=npfit,DC=nhs,DC=uk8194 was put into queue PUBLIC=e50ae2b5-25ce-447d-96ea-9ec4c9de3d48

自定义系统日志还记录:

2016-05-13 15:00:40,045 NPFITMyUserName
ERROR Logging.Log4NetLogger Message Queue Exception:  Inner Exception  Error Code: -2147016672 System.Messaging.MessageQueueException (0x80004005)
   at System.Messaging.MessageQueue.GenerateQueueProperties()
   at System.Messaging.MessageQueue.get_QueuePath()
   at System.Messaging.MessageQueue.get_QueueName()
   at MSMQCoreService.QueueManager.SendMessage[T](String queueName, T messageObject) in c:SourceApplicationMSMQCoreServiceQueueManager.cs:line 164

这让我编辑了上面提到的另一篇stackoverflow文章的#5,但在打开所有权限的情况下,将消息添加到队列中失败。

我知道这是一个旧线程,但我最近遇到了一个类似的问题,即BizTalk Server独立(基于IIS)主机调用MessageQueue。

根本原因似乎是IIS应用程序池帐户的配置文件未加载,因此没有可用的证书信息。

解决方案:在IIS中的应用程序池上选择"加载用户配置文件"选项。

最新更新