2011-12-13 63 views
1

我正尝试连接到MSMQ并发送一些消息。不幸的是,这个项目中有“先前的艺术”,我应该模仿它。这个以前的应用程序连接的方式如下:连接到MSMQ,“正确”的方式?

if (MSMQ in workgroup mode) 
{ 
    connect via FormatName; 
} 
else 
{ 
    if (connected to network) 
     connect via PathName; 
    else 
     connect via GUID (as FormatName) 
} 

这一切是否真的有必要?不应该有一个正确的FormatName足以连接到一个队列?

此外,通过调用NetGetDCName()来检测“连接到网络”,它在我的MSDN中被标记为废弃,这增加了我为什么以这种方式连接应用程序的困惑。

TL; DR:上述连接逻辑是错误的,过时的还是正确的?我是否可以通过简单地使用FormatName连接所有情况来简化此操作?

回答

4

该代码通过查找域控制器来确定域是否可用。如果域不可用,则MSMQ被假定为以非域或工作组模式工作。

域模式允许使用公共队列和路径名寻址。 工作组模式改为使用专用队列和格式名称寻址(尽管这是一种简化)。

因此,代码确实决定了要使用的消息寻址模式。

没有足够的关于环境的信息来说明是否可以对所有情况使用formatname。

干杯
约翰Breakwell

+0

所以基本上,我的最简单的办法是简单地做他们的方式一样吗?即使使用过时的功能?我问过这个环境,他们说它应该是一个工作组,但我仍然需要覆盖所有的基础(我非常警惕“应该”:))。 –

+1

obselete代码不是MSMQ的一部分,所以我不能说。我期望它应该能够在域中的PDC模拟器作出响应。我猜测代码是从Windows NT4时代开始的。 FormatName寻址可以连接到任何东西,所以你应该可以标准化。 –

+0

如果FormatName很好,那就是我需要的!谢谢你的帮助! –