2011-05-11 51 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