MSMQ 的 訪問方式 亂彈
Report Date
:
??
|
Prepared by
:
????
鄭昀
|
Article last modified on
|
|
The information in this article applies to:
ü
????????
Microsoft MSMQ
|
問題陳述
:
有一個網(wǎng)友問我,執(zhí)行
IMSMQQueueInfoPtr pisQI = NULL;
HRESULT hr = pisQI.CreateInstance("MSMQ.MSMQQueueInfo");
pisQI->
PathName
= "
direct=tcp:172.xx.xx.xx\\private$\\YourMQName
";
或者
pisQI->
PathName
= "
172.xx.xx.xx\\private$\\YourMQName
";
hr = pisQI->raw_Open(MQ_SEND_ACCESS,MQ_DENY_NONE,&pisQueue);
|
都會出錯,錯誤號是:
0xC00E0014
,
which means illegal queue pathname(
非法的路徑名
)
。
但是,
MSDN
上確實是這么描述
DIRECT
語法的呀
?
為什么不能指定
IP
地址用于訪問
MSMQ
隊列呢?
這到底是怎么回事呢?
最開始我一直沒有注意到他操作的是
PathName
屬性,所以也有點(diǎn)困惑。
?
原因分析:
對于
IMSMQQueueInfo
的
PathName
這個屬性,它只接受這樣的語法:
"myComputer\myPublicQueue"
"otherComputer\otherPublicQueue"
"myComputer\Private$\myPrivateQueue"
".\myPublicQueue"
".\Private$\myPrivateQueue"
而不接受這樣的
IP
標(biāo)示:
xxx.xxx.xxx.xxx \private$\yourqname
因為并沒有可供使用的語法指明這個地址是
IP
地址,所以
MS
不支持這種寫法,會返回錯誤
MQ_ERROR_ILLEGAL_PATHNAME (C00E0014)
。
對于
FormatName
這個屬性,它才接受你的各種各樣
DIRECT
語法:
Direct=tcp:
MyMachineHostName \private$\yourqname
Direct=tcp:
xxx.xxx.xxx.xxx \private$\yourqname
??????????????
PUBLIC=
QueueGUID
??????????????
DIRECT=
Protocol
:
ComputerAddress
\
QueueName
??????????????
DIRECT=OS:
ComputerName
\private$\
QueueName
PRIVATE=
ComputerGUID
\
QueueNumber
因為它可以顯式指明使用的協(xié)議。
如果你不小心給
FormatName
這個屬性賦值
MyMachineHostName \private$\yourqname
,那就會得到
MQ_ERROR_ILLEGAL_FORMATNAME (C00E001E)
這個錯誤。
同樣,如果你不小心給
PathName
這個屬性賦值
direct=tcp:172.xx.xx.xx\private$\YourMQName
,那就會得到
MQ_ERROR_ILLEGAL_PATHNAME (C00E0014)
這個錯誤。
這兩個屬性真的不一樣啊,不要搞混了。
我的其他建議:
如果你本機(jī)的
MSMQ
安裝模式是
Workgroup
模式:
只能使用
.\private$\ YourPrivateMQName
來訪問本機(jī)的私有
MSMQ
隊列。
而不能使用
.\ YourPublicMQName
,即本機(jī)的公用隊列你無法訪問,只有在
AD
模式下才可以訪問公用隊列。
謹(jǐn)慎起見,我進(jìn)一步建議你不要在
FormatName
屬性上使用
DIRECT
語法,因為:
MSMQ1.0
并不是完全支持
DIRECT
語法,
MSMQ2.0
才支持的。
最好用
PathName
屬性。
所以,一般請這么使用
PathName
:
MyMachineHostName \ YourPublicMQName
。
除非你要在
Internet
上訪問遠(yuǎn)端
MSMQ
,再使用
FormatName
屬性指定對方
IP
地址。
Writen by zhengyun.NoJunk(at)tomosoft.dot.com
Disclaimers
:
本文檔所包含的信息代表了在發(fā)布之日,
ZhengYun
對所討論問題的當(dāng)前看法,
Zhengyun
不保證所給信息在發(fā)布之日以后的準(zhǔn)確性。
本文檔僅供參考。對本文檔中的信息,
Zhengyun
不做任何明示或默示的保證。
用戶必須遵守所有適用的版權(quán)法。在不對版權(quán)法所規(guī)定的權(quán)利加以限制的情況下,如未得到
zhengyun
和
CSDN.Net
明確的書面許可,不得出于任何目的、以任何形式或手段(電子的、機(jī)械的、影印、錄制等等)復(fù)制、傳播本文的任何部分,也不得將其存儲或引入到檢索系統(tǒng)中。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12746
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
