2009-09-23 57 views
4

我在远程机器上有一个私人队列,所有人和匿名登录都具有完全访问权限。下面的代码产生并尝试接收时错误:如何接收来自私人工作组队列的邮件

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! :| 
  • 的错误信息是:消息队列服务不可用。使用OS时
  • 所发送的消息中的远程机器上结束了在队列
  • 同样的情况:计算机名,而不是TCP:XX.XX.XX.XX
  • 队列服务器不是域的一部分。

任何想法?

回答

3

如果远程机器是则一个不同的域的一部分:对跨林计算机上运行的运行家族的成员在非受信任域将使用安全的远程读取API

MSMQ 3.0应用程序。默认情况下,托管包含要读取消息的队列的MSMQ 3.0服务器要求其他域计算机发出读请求以建立加密通道,但无法在不可信域之间建立此通道。因此,来自跨林电脑的远程读取请求将被拒绝。要修改这个默认行为并允许消息队列服务器接受来自域中计算机的请求不建立一个加密通道,加上

HKLM\SOFTWARE\Microsoft \MSMQ\Parameters\Security\NewRemoteReadServerAllowNoneSecurityClient

注册表项(一个DWORD),并将其设置为1。

这是表格:Reading Messages from Remote Queues

+1

谢谢。这使我走上了正轨。事实证明,这是一个权限问题,因为它在2008 Server上运行,所以它可以通过GUI界面进行更改。 – 2009-09-30 15:01:35

相关问题