我在远程计算机上有一个私人队列,每个人和匿名登录都有完全访问权限。尝试接收时,以下代码生成并出错:
var qpath = @"FormatName:DIRECT=TCP:xx.xx.xx.xx\PRIVATE$\QueueName";
var q = new MessageQueue(qpath);
var msg = new Message();
msg.AttachSenderId = false;
msg.Recoverable = true;
msg.Body = "hello";
q.Send(msg); // <-- this works!
var recMsg = q.Receive(TimeSpan.Zero); // <-- this breaks! :|
有什么想法吗?
答案 0 :(得分:3)
如果远程计算机属于其他域,则:
在运行非信任域中的系列成员的跨林计算机上运行的MSMQ 3.0应用程序将使用安全的远程读取API。默认情况下,托管包含要读取的消息的队列的MSMQ 3.0服务器要求其他域计算机发出读取请求以建立加密通道,但不能在不可信域之间建立此类通道。因此,来自跨林计算机的远程读取请求将被拒绝。若要修改此默认行为并允许消息队列服务器接受来自未建立加密通道的域计算机的请求,请添加
HKLM\SOFTWARE\Microsoft \MSMQ\Parameters\Security\NewRemoteReadServerAllowNoneSecurityClient
注册表项(DWORD)并将其设置为1.