2011-05-11 63 views
2

我有一個VB6應用程序與MQSeries自動化類爲ActiveX。問題是當我寫入隊列中的消息時。我使用此代碼:IBM MQSeries ActiveX寫入消息錯誤

這是我如何打開連接並相對隊列:

Set MQSess = New MQSession 
//Access Queue 
Set QMgr = MQSess.AccessQueueManager(QueueManagerName) 

Dim Queue As MQQueue 
Dim msg As MQMessage 
Dim pmo As MQPutMessageOptions 

Dim ArrCar() As Byte 

Set pmo = New MQPutMessageOptions 

Set Queue = QMgr.AccessQueue(QueueName, OpenOption , RemoteQueueManagerName) 
//OpenOption is a integer with value of 16 (MQOO_OUTPUT) 

strMsgAppo = Translate("*MESSAGE_TO_INSERT*", ASCII_To_EBCDIC_Table()) 

ReDim ArrCar(Len(strMsgAppo) - 1) 
For lngI = 1 To Len(strMsgAppo) 
    ArrCar(lngI - 1) = Asc(Mid(strMsgAppo, lngI, 1)) 
Next lngI 

Call msg.Write(ArrCar) //Write the ByteArray 

Call Queue.Put(msg, pmo) 

的ASCII_To_EBCDIC_Table是用於改變編碼的功能。

我從MQ讓我的錯誤是:

MQAX200.MQMessage ::寫CompletionCode = 2,ReasonCode = 2043,ReasonName = MQRC_OBJECT_TYPE_ERROR


是否有人使用此ActiveX和可以幫助我如何在隊列中寫消息?

回答

1

失敗在您的msg.Write上,您應該使用.WrirteString方法代替,將.CharacterSet屬性設置爲37(EBCDIC)後。

你的Translate()函數的hackish方法可能工作,但只有分配給Byte數組。正如你所看到的,當數據轉換回Unicode時,你很可能會看到擾亂的情況。或者,如果Translate()確實返回了一個Byte數組,那麼您將在Unicode字符串中使用8位數據(這可能很好,但不會與此MQ庫一起)。

你可能只需要把Translate()和你的桌子扔掉。

該API的IBM手冊被稱爲「Using the Component Object Model Interfac e」。一探究竟!

+0

根據文檔,Message :: Write不會拋出2043.如果您說文檔錯誤,請告訴我,以便我可以對其進行更改。最好我可以告訴,有一個隱含的OPEN出錯了,否則這種情況會在隨後的PUT上發生。我很喜歡它是OP更新的代碼或跟蹤的其餘部分。 – 2011-05-11 21:08:06

+0

感謝您提供關於字符集的提示,現在我將做出此更改並將生成的可執行文件發送給生產組,以便他們發回日誌以查看發生了什麼。我給你的兩個問題: 1)是否需要轉換爲ebcdic? 2)我已經看到,我只打開OUTPUT選項的隊列,也許可以這是拋出錯誤2043? 對不起,這個程序不是由我做的,我只是爲了解決這個錯誤...這是我第一次使用MQ ... – 2GDev 2011-05-12 08:56:18

+0

@ T.Rob感謝您添加鏈接。因爲IBM將事情做了很多,當然還有不同版本的WebSphere MQ文檔。但是一個鏈接比沒有鏈接要好。 – Bob77 2011-05-12 09:15:30

2

在提供的代碼片段中,我沒有看到與QMgr連接的位置以及打開隊列的位置。在可能將消息放入隊列之前,必須先完成這兩個步驟。

當在郵件選項字段中存在PUTOPEN的無效選項時,會出現2043原因碼。在這種情況下,問題可能在PUT上,也可能是隱含的OPEN,具體取決於代碼中未提供的內容以及它是否包含OPEN

我的建議是參考安裝時提供的.Net示例,並在這些示例和應用程序之間進行協調。樣本駐留在C:\Program Files (x86)\IBM\WebSphere MQ\tools\dotnet\samples的默認V7安裝中。

+0

謝謝,但我沒有這個安裝..否則,我已經爲ActiveX的MQSeries自動化類,並在VB中有一些例子。 – 2GDev 2011-05-12 09:01:05

+0

非標準安裝是WMQ客戶端出現問題的首要原因。因爲完整的客戶端安裝既免費又受支持。如果你想要的樣本,所有的診斷和一個完整的庫設置,它可以在http://bit.ly/SupportPacMQC7免費下載。在任何情況下,2043只會記錄在'CONNECT'或'PUT'上,所以如果文檔錯誤,您的寫入調用是在執行隱式的'CONNECT'或'PUT',或者您還剩下一些代碼這將有助於診斷。具體來說,在'MQCNO'中爲'CONNECT'設置的選項或''PUT'在MQPMO中設置的選項無效。 – 2011-05-12 10:01:07

+0

現在工作...在另一臺機器上編譯的同一個src代碼工作! 謝謝 – 2GDev 2011-05-12 11:01:15