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

时间:2016-05-13 10:12:32

标签: c# asp.net-mvc authentication windows-authentication msmq

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

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

服务器上的应用程序池在域帐户下运行。此帐户已用于登录服务器,因此已在计算机上生成证书(ref: John Breakwell’s blogthis StackOverflow solution

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

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

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

我尝试更新内部证书(在Message Queue Properties中),该证书将错误消息更改为:加密功能失败(CorruptedSecurityData)。使用服务帐户登录服务器时,错误消息将返回到原始文件。

我尝试更改邮件队列权限,以便“Everyone”和“ANONYMOUS LOGON”以及我的个人域帐户具有完全控制权,并且身份验证已被删除。

编辑#1

确保队列和发送消息属性都包含对FullReachQueue的确认,并且通过设置上述权限,事件日志:{应用程序和服务日志,Microsoft,Windows,MSMQ,End2End}显示两个新条目:

Message with ID CN=msmq,CN=TDBDEV,OU=Hosted Servers,OU=Member Servers,DC=npfit,DC=nhs,DC=uk\8194 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=uk\8194 was put into queue PUBLIC=e50ae2b5-25ce-447d-96ea-9ec4c9de3d48

自定义系统日志记录也记录了:

2016-05-13 15:00:40,045 NPFIT\MyUserName
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:\Source\Application\MSMQCoreService\QueueManager.cs:line 164

这将我带到上面提到的另一个stackoverflow帖子的编辑#5,但是在所有权限都打开的情况下向队列添加消息失败。

1 个答案:

答案 0 :(得分:0)

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

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

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