发送到经过身份验证的队列

时间:2012-11-01 19:25:07

标签: wcf msmq

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

以下是我正在使用的绑定:

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);

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

所以,第一个问题:如何将消息发送到经过身份验证的队列?


看起来我需要使用msmqAuthenticationMode的{​​{1}}来启用传输安全性。但是,当我这样做时,我收到以下错误:

WindowsDomain

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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