我正在创建一个基于Web的解决方案(MVC / C#),它将消息放在MSMQ公共队列上。我目前正在我是管理员的开发服务器上进行测试。
Web服务器是单个服务器,启用了WindowsAuthentication和ASP.NET模拟,并禁用了匿名身份验证。
服务器上的应用程序池在域帐户下运行。此帐户已用于登录服务器,因此已在计算机上生成证书(ref: John Breakwell’s blog和this 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,但是在所有权限都打开的情况下向队列添加消息失败。
答案 0 :(得分:0)
我知道这是一个旧线程,但我最近遇到了一个类似的问题,涉及一个调用MessageQueue的BizTalk Server Isolated(基于IIS)主机。
根本原因似乎是未加载IIS应用程序池帐户的配置文件,因此没有可用的证书信息。
解决方案:在IIS中的应用程序池中选择“加载用户配置文件”选项。