【问题标题】:IBM MQ issue with 32-bit operating system(not able to connect)32 位操作系统的 IBM MQ 问题(无法连接)
【发布时间】:2014-11-12 22:25:06
【问题描述】:

在与 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 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 位操作系统中失败。

【问题讨论】:

  • 任何输入可能会有所帮助?

标签: c# ibm-mq


【解决方案1】:

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

您是否在 WinXP 机器上安装 MQ v71 客户端?

【讨论】:

  • 谢谢,我从www-01.ibm.com/support/docview.wss?uid=swg24031412下载了适用于windows的v7.1.0.0,我没有看到mqz.dll(但是我看到了mqzsd.dll),你能把链接分享给我吗你下载了吗?我已经在winXP机器上安装了MQ v7.1.0.0,我得到了,mqz.dll not found.
  • 如果我安装在 64 位机器上,虽然我在 bin 文件夹中没有 MQZ.dll,但是当我在 32 中安装相同的 MQ 客户端 7.1.0.0 时,它可以在那里工作-bit 机器,我找不到 MQZ.dll 的 dll(bin 文件夹中没有 MQZ.dll)。
  • 我从与您相同的链接安装。我刚刚选择了 MQ v7.1.0.2 客户端,因为这是最新的修复包。
  • 它在 7.1.0.2 上也适用于我,但是,我在 7.1.0.0 的 32 位操作系统中遇到问题。
  • 如果它与 7102 一起工作,那就去吧。这是 7.1 的最新修订包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 2011-02-20
  • 2015-01-24
  • 1970-01-01
  • 2015-09-26
相关资源
最近更新 更多