与IBM MQ 7.1客户端连接时,我遇到32位Windows OS(Windows XP)的问题。
我使用的是7.1.0.0 amqmdnet.dll(从IBM \ websphere \ bin文件夹引用)
<Reference Include="amqmdnet, Version=7.1.0.0, Culture=neutral, PublicKeyToken=da2dc1d9abf9ed97, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..IBM\WebSphereMQ\7.1.0.0\amqmdnet.dll</HintPath>
</Reference>
(从IBM link下载)
使用MQ.NET类构建我的.net应用程序,但是在部署之后,如果目标计算机安装了7.1.0.0 MQ客户端,则应用程序将抛出
System.DllNotFoundException:无法加载DLL'C:\ Program Files \ IBM \ WebSphere MQ \ bin \ mqz.dll':指定的模块不能 找到。 (HRESULT异常:0x8007007E)
at NativeUnmanagedType.zstSPI(Int32 hConn, Int32 verbId, Int32 hObj, Byte[] pInOut, Byte[] pIn, Byte[] pOut, Int32& compCode, Int32& reason)
at IBM.WMQ.Nmqi.UnmanagedNmqiMQ.SPIQuerySPI(Hconn hConn, Int32 verbId, Int32& maxInOutVersion, Int32& maxInVersion, Int32& maxOutVersion, Int32& flags, Int32& pCompCode, Int32& pReason)
at IBM.WMQ.Nmqi.UnmanagedNmqiMQ.MQCONNX(String pQMgrName, MQCNO& pConnectOpts, Hconn parentHconn, Phconn phconn, Int32& pCompCode, Int32& pReason)
at IBM.WMQ.Nmqi.UnmanagedNmqiMQ.MQCONNX(String pQMgrName, MQConnectOptions pConnectOpts, Phconn phconn, Int32& pCompCode, Int32& pReason)
at IBM.WMQ.MQQueueManager.Connect(String queueManagerName)
at IBM.WMQ.MQQueueManager..ctor(String queueManagerName, Hashtable properties)
我的代码是
// mq properties
properties = new Hashtable();
properties.Add(MQC.CONNECTION_NAME_PROPERTY, "Connection Name");
properties.Add(MQC.TRANSPORT_PROPERTY, "Transport Type");
properties.Add(MQC.CHANNEL_PROPERTY, "Channel Name");
properties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_HANDLE_SHARE_BLOCK);
//To read the messages
mqGetMsgOpts = new MQGetMessageOptions();
if (mqQueue != null)
{
//Get options for the messsage
mqGetMsgOpts.Options = MQC.MQGMO_BROWSE_FIRST | MQC.MQGMO_WAIT | MQC.MQOO_INQUIRE;
mqGetMsgOpts.MatchOptions = MQC.MQMO_NONE;
mqGetMsgOpts.WaitInterval = 5000; // 5 seconds limit for waiting
}
if (mqMsg.MessageLength > 0 && mqMsg.DataLength > 0)
{
messageData = mqMsg.ReadString(mqMsg.MessageLength);
}
调用队列管理器提交后会有browse_next(所以浏览下一个消息)。
//To put the message
if(mqQueue==null)
mqQueue = mqQMgr.AccessQueue("Queue Name",
MQC.MQOO_OUTPUT | MQC.MQOO_INPUT_SHARED | MQC.MQOO_INQUIRE);
mqMsg.WriteString(message);
我如何解决这个错误,任何想法?同一段代码适用于精细的Windows 64位操作系统。我没有64位操作系统的websphere MQ客户端安装文件夹中的bin文件夹中的mqz.dll,它可以工作,但它在32位操作系统中失败。
答案 0 :(得分:1)
我只是在64位计算机上安装MQ v71客户端。我可以在Program Files (x86)\IBM\WebSphere MQ\bin
和Program Files (x86)\IBM\WebSphere MQ\bin64
文件夹中看到MQZ.DLL。
您是否已在WinXP计算机上安装 MQ v71客户端?