zoukankan      html  css  js  c++  java
  • IBM MQ Reason 2538(MQRC_HOST_NOT_AVAILABLE) 错误原因一例

    环境: .NET 4.0, MQ .NET客户端 IBM.XMS(v2.0.0.3)

    测试代码如下:

           var factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
           var _connFactory = factoryFactory.CreateConnectionFactory();
    
           _connFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, "192.168.0.65");
           _connFactory.SetIntProperty(XMSC.WMQ_PORT, 1414);
           _connFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "XPP_QM");
           _connFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
           _connFactory.SetIntProperty(XMSC.WMQ_BROKER_VERSION, XMSC.WMQ_BROKER_V1);
           _connFactory.SetStringProperty(XMSC.CLIENT_ID, string.Empty);
    
           var conn = _connFactory.CreateConnection();
           conn.Start();

    错误为:

    IBM.XMS.XMSException: CWSMQ0006E: 调用方法 ConnectionFactory.CreateConnection 期间接收到了异常:CompCode: 2, Reason: 2538

    。 在执行指定的方法期间,另一个组件抛出了异常。 有关更多信息,请参阅链接异常。
    在 IBM.XMS.Client.WMQ.WmqConnectionFactory.CreateProviderConnection(XmsPropertyContext connectionProps)
    在 IBM.XMS.Client.Impl.XmsConnectionFactoryImpl.CreateConnection(String userID, String password)
    在 IBM.XMS.Client.Impl.XmsConnectionFactoryImpl.CreateConnection()
    在 XRisk.MQ.MQConnection.Open(Boolean needLog) 位置 e:xRisk4-srcXRisk.MQMQConnection.cs:行号 314

    Linked Exception : CompCode: 2, Reason: 2538

    真正的异常是下面的代码中报的。

    IBM.WMQ.MQTCPConnection ---- < ParseLocalAddress(String) exit [o] rc=OK
    IBM.WMQ.MQTCPConnection --- d Exception in method ConnectSocket(string,string,MQLONG)
    IBM.WMQ.MQTCPConnection --- X System.Net.Sockets.SocketException (0x80004005): The requested name is valid and was found in the database, but it does not have the correct associated data being resolved for
    at System.Net.Dns.InternalGetHostByAddress(IPAddress address, Boolean includeIPv6)
    at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
    at IBM.WMQ.MQTCPConnection.ConnectSocket(String localAddr, String connectionName, Int32 options)
    MQException CompCode: 2 Reason: 2538

    真实的原因是在.NET 4.0中,微软改变了接口 Dns.GetHostEntry 的行为。当直接使用IP作为参数时就会变报,如果使用机器名或域名就不会报告。

    解决方法如下

    1. 使用 IPAddress.TryParse()或Dns.Resolve(string) 来代替Dns.GetHostEntry 。

    2. 如果使用了第三方的库,不能修改代码,则可以把IP用机器名或域名代码。如上面的代码可以改成。

    var factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
    var _connFactory = factoryFactory.CreateConnectionFactory();
    
    _connFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, "hostname");
    _connFactory.SetIntProperty(XMSC.WMQ_PORT, 1414);
    _connFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "XPP_QM");
    _connFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
    _connFactory.SetIntProperty(XMSC.WMQ_BROKER_VERSION, XMSC.WMQ_BROKER_V1);
    _connFactory.SetStringProperty(XMSC.CLIENT_ID, string.Empty);
    
    var conn = _connFactory.CreateConnection();
    conn.Start();

    参考:

    http://connect.microsoft.com/VisualStudio/feedback/details/561083/dns-gethostentry-behaves-differently-in-net-4-0-than-previous-versions

    http://stackoverflow.com/questions/2714449/problem-with-system-net-dns-gethostentrydnsserver-on-net-4-0

    https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014538533#77777777-0000-0000-0000-000014538832

  • 相关阅读:
    HttpInvoker-----服务端实现
    RMI实现-----客户端的实现
    RMI实现-----服务端的实现
    远程服务(RMI)使用示例
    DispatcherServlet的逻辑处理(下篇)
    DispatcherServlet的逻辑处理(上篇)
    SpringMVC-----DispatcherServlet
    SpringMVC-----ContextLoaderListener
    爬取淘宝笔记本电脑数据(一)
    哔哩哔哩自动播放视频
  • 原文地址:https://www.cnblogs.com/jmax/p/3494320.html
Copyright © 2011-2022 走看看