MSMQ適配器的地址格式:
MSMQ://FORMATNAME:Direct=tcp:192.168.6.16\private$\QueueName
對於IMSMQQueueInfo的PathName這個屬性,它只接受這樣的文法:
"myComputer\myPublicQueue"
"otherComputer\otherPublicQueue"
"myComputer\Private$\myPrivateQueue"
".\myPublicQueue"
".\Private$\myPrivateQueue"
而不接受這樣的IP標示:
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
因為它可以顯式指明使用的協議。
如果你不小心給FormatName這個屬性賦值
MyMachineHostName \private$\yourqname,那就會得到
MQ_ERROR_ILLEGAL_FORMATNAME (C00E001E)這個錯誤。
同樣,如果你不小心給PathName這個屬性賦值
direct=tcp:172.xx.xx.xx\private$\YourMQName,那就會得到
MQ_ERROR_ILLEGAL_PATHNAME (C00E0014)這個錯誤。
這兩個屬性真的不一樣啊,不要搞混了。
我的其他建議:
如果你原生MSMQ安裝模式是Workgroup模式:
只能使用.\private$\ YourPrivateMQName來訪問原生私人MSMQ隊列。
而不能使用.\ YourPublicMQName,即原生公用佇列你無法訪問,只有在AD模式下才可以訪問公用佇列。
謹慎起見,我進一步建議你不要在FormatName屬性上使用DIRECT文法,因為:
MSMQ1.0並不是完全支援DIRECT文法,MSMQ2.0才支援的。
最好用PathName屬性。
所以,一般請這麼使用PathName:
MyMachineHostName \ YourPublicMQName。
除非你要在Internet上訪問遠端MSMQ,再使用FormatName屬性指定對方IP地址。