【问题标题】:Sending to authenticated queue发送到经过身份验证的队列
【发布时间】:2012-10-22 10:55:38
【问题描述】:

我的本​​地机器上有一个事务专用队列。如果队列未通过身份验证,则消息进入队列。如果我将队列设置为进行身份验证,则不会。发送到队列的应用程序正在以我自己的身份运行(并且我可以完全控制队列)。匿名用户还具有队列上的发送消息权限。我很困惑我需要做什么才能将消息发送到经过身份验证的队列。

这是我正在使用的绑定:

NetMsmqBinding msmq = new NetMsmqBinding(NetMsmqSecurityMode.None);
msmq.MaxReceivedMessageSize = int.MaxValue;
msmq.CloseTimeout = TimeSpan.FromMinutes(3);
msmq.SendTimeout = TimeSpan.FromMinutes(3);
msmq.ReceiveTimeout = TimeSpan.FromMinutes(3);
msmq.ReaderQuotas.MaxDepth = int.MaxValue;
msmq.ReaderQuotas.MaxStringContentLength = int.MaxValue;
msmq.ReaderQuotas.MaxArrayLength = int.MaxValue;
msmq.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
msmq.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
msmq.ExactlyOnce = true;
msmq.Durable = true;
msmq.TimeToLive = TimeSpan.FromHours(1);

理想情况下,我希望每个人(包括无法识别的用户)都能够发送消息,但限制谁可以偷看和接收消息。我不确定这是否可能。

那么,第一个问题:如何将消息放入经过身份验证的队列?


看来我需要使用msmqAuthenticationModeWindowsDomain 打开传输安全性。但是,当我这样做时,我收到以下错误:

Binding validation failed because the binding's MsmqAuthenticationMode property is set to WindowsDomain but MSMQ is installed with Active Directory integration disabled. The channel factory or service host cannot be opened.

看起来我的 MSMQ 是 installed in Workgroup mode, not Directory mode。我该如何解决?当我删除 MSMQ 然后将其添加回来(具有所有功能)时,它仍然不在目录模式下。我在Win7上。

【问题讨论】:

  • 对于目录模式,您需要一个域控制器和一个域。如果您只有一台 Windows 7 机器,那么您可以使用 VirtualPC/VMware 为您的机器创建一个 Windows 服务器以用作域控制器。

标签: wcf msmq


【解决方案1】:

身份验证需要 Active Directory。 MSMQ 检查发件人在 AD 中是否有证书。因此仅适用于域帐户。域帐户登录机器托管队列时创建的证书。

【讨论】:

  • 所以,我以域帐户登录我的机器。如果我以自己的身份运行(VS 中的 F5),则没有消息进入。如果我以用户身份运行 EXE(我自己,但现在使用显式域登录),队列中仍然没有消息出现。如何让队列接受消息?
【解决方案2】:

MSMQ 必须为installed in Directory mode,并且您必须将msmq.Security.Mode 设置为Transport 以提供WindowsDomain 凭据。要进入目录模式,您需要重新安装 MSMQ - 但请确保在重新安装之前remove the msmq object on your machine

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 2019-03-29
    • 2011-12-22
    • 2011-11-01
    • 2017-09-26
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多