我正在尝试访问队列并收到拒绝访问错误。令人困惑的部分是队列被设置为允许每个人完全控制以及匿名和机器名$(所有三个都是完全控制 - 它是一个测试系统,所以没什么大不了的)。我能够成功写入队列,但不能从中查看/读取/接收。我在这里发现了一篇建议使用FormatName方法的文章,但遗憾的是我已经这样做了。
对此的问题是我的系统位于一个AD域上,测试服务器完全针对另一个域运行(我的客户端)。我想用这个完成不可能的事吗?
我的平台是Vista x64,服务器是2008(不是R2)。
代码如下所示:
Do While Not m_boolCancel
'**Code dies on this line**
l_ar = m_mq.BeginPeek
'block thread till message arrived or shutdown is signalled
If WaitHandle.WaitAny(New WaitHandle() {m_sig, l_ar.AsyncWaitHandle}) > 0 Then
l_msg = m_mq.EndPeek(l_ar)
If l_msg IsNot Nothing Then
'doing stuff here
End If
Exit Do
End If
答案 0 :(得分:2)
要使MSMQ跨域工作,相关域必须建立双向信任。消息队列必须是公共队列。如果将它设置为事务性队列,则客户端和服务器都必须使用MSMQ 4.0(Windows Server 2008及更高版本的一部分)
答案 1 :(得分:1)
仅为测试提供匿名完全控制。
答案 2 :(得分:1)
检查客户端和服务器之间的时钟:太大的时间跨度可能会导致“访问被拒绝”。
答案 3 :(得分:0)
除非您使用域进行身份验证,否则系统位于不同的域上应该不是问题。当你给“系统”完全控制时会发生什么?请编辑您的问题,以包含用于打开队列的代码以及如果无法解决问题则收到的确切错误。