0

与 IBM MQ 7.1 客户端连接时,我在使用 32 位 Windows 操作系统(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 链接下载)

并使用 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 位操作系统中失败。

4

1 回答 1

1

我只是在 64 位机器上安装 MQ v71 客户端。Program Files (x86)\IBM\WebSphere MQ\bin我可以在和文件夹中看到 MQZ.DLL Program Files (x86)\IBM\WebSphere MQ\bin64

你在 WinXP 机器上安装了 MQ v71 客户端吗?

于 2013-04-24T09:59:58.547 回答