3

在发布这个问题之前,我搜索了所有论坛主题。我发现我的问题类似于Sending to authenticated queue但是该线程并没有真正回答我的问题。

我有以下设置(使用 .NET 应用程序和 MSMQ)

  • 在我的 Windows7 64 位机器上安装了带有 Active Directory 服务集成模式的 MSMQ 。
  • 我创建了两个私有队列(PQ1 和 PQ2)作为事务队列,并将其安全选项卡配置为提供对域用户 ID(域用户 ID,它也是 Win7 机器上的管理员)的完全访问权限。
  • 在我的项目中,我有三个 .NET 4.0 应用程序,它们在这台 Windows 7 机器上由 Windows 服务托管(以相同域用户 ID 的访问权限运行)
  • 第一个 .NET 应用程序在其自己的线程上运行,该线程从数据库读取数据并将 MSMQ 消息发送到 PQ1 队列
  • 第二和第三个是从 Windows 服务自托管的 WCF 应用程序(例如 wcfA 和 wcfB)。
  • wcfA 和 wcfB 为 MsmqIntegrationBinding 配置了传输安全模式,属性 mqAuthenticationMode 设置为“WindowsDomain”,msmqProtectionLevel 设置为“EncryptAndSign”
  • wcfA 从 PQ1 获取消息,然后处理该消息并将另一条 MSMQ 消息发送到 PQ2
  • wcfB 从 PQ2 获取消息并对其进行处理

请注意,在上述设置中一切正常。

但是,当我在其 General 选项卡上启用私有 Queues PQ1 和 PQ2 的“Authenticated”复选框时,问题就开始了。在此设置之后,第一个应用程序将 MSMQ 消息发送到专用队列,但它最终进入“事务死信消息”队列。我尝试将Authenticated Users组添加到队列安全选项卡并提供完全访问权限,但它不起作用。

除此之外,我还观察到进入死信队列的消息的“属性”页面上的“发件人”选项卡显示“已验证:否”

非常感谢您的帮助,以使应用程序与 Authenticated Queue 一起工作。

4

1 回答 1

4

初始化Message对象后,将 UseAuthentication属性设置为true

将消息发送到经过身份验证的队列的示例:

private void SendToQueue(string queueMessage)
{
   var message = new System.Messaging.Message(queueMessage);
   message.UseDeadLetterQueue = true;            

   // This line resolved issue for sending message to queue with Authenticate checkbox checked. 
   message.UseAuthentication = true; 

   var queue = new System.Messaging.MessageQueue(@"FormatName:Direct=OS:.\private$\PQ1");
   queue.Send(message, MessageQueueTransactionType.Single);
}
于 2013-06-18T10:16:34.683 回答