【发布时间】:2013-08-06 14:35:12
【问题描述】:
我已取消选择在专用队列上发送消息的权限,但 MessageQueue.CanWrite 永远不会返回 false。我可以切换接收消息权限,CanRead 属性按预期响应。为什么CanWrite 属性的行为会有所不同?
我已经用几个不同的 AD 用户测试了这个问题,结果是一样的。
是否有不同的方法来验证特定用户帐户是否可以将消息发送到特定的远程专用队列?
public class SendBehavior : IMsmqRuleBehavior
{
public bool Validate(string queuePath)
{
using (var queue = new MessageQueue(queuePath, QueueAccessMode.Send))
{
return queue.CanWrite;
}
}
}
public class ReceiveBehavior : IMsmqRuleBehavior
{
public bool Validate(string queuePath)
{
using (var queue = new MessageQueue(queuePath, QueueAccessMode.Receive))
{
return queue.CanRead;
}
}
}
【问题讨论】:
-
看来如果
QueueAccessMode.Send被请求,CanWrite很可能是true。 (附带问题:您是否为此队列切换了“已验证”复选框) -
我考虑过,但默认的 QueueAccessMode 是 SendAndReceive,CanRead 测试的行为与预期一样,QueueAccessMode 设置为 Receive。
-
当您设置
QueueAccessMode.Receive时,CanWrite是否会变为false?因为从我对 ILSpy 中MessageQueue类的回顾来看,似乎只有您提供的模式才能反映这些属性值。 -
另外,发送消息时会失败吗?看来这将是确定这是否是预期行为的关键。
-
已验证复选框未选中。现在是,行为没有改变。