环境: .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, );
_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-src\XRisk.MQ\MQConnection.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: Reason:

真实的原因是在.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, );
_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

IBM MQ Reason 2538(MQRC_HOST_NOT_AVAILABLE) 错误原因一例的更多相关文章

  1. 连接IBM MQ原因码报2035的错误解决办法

    我们的系统使用了ibm mq,用户用来向国家局上报文件和接收文件,前几天用户说上报一直不成功.由于 开发这块程序的人已经辞职了,我觉定在我的机器部署一套,研究一下.我的思路: 在我的机器上安装mq,建 ...

  2. IBM MQ 2035 或 2013认证错误的解决方法

    第一种方法: ALTER CHL(SYSTEM.BKR.CONFIG) CHLTYPE(SVRCONN) ALTER CHL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN ...

  3. IBM MQ相关 ---- 系列文章

    原 IBM websphere MQ远程队列的简单配置 转 MQ7.5以后的权限问题解决 原 MQ--API总结 转 连接IBM MQ原因码报2035的错误解决办法 原 Java连接MQ的实例 转 通 ...

  4. 用IBM MQ中间件开发碰到的MQRC_NOT_AUTHORIZED(2035)问题

    我在一台工作站上面部署了MQ服务器,在MQ服务器中我建立了队列管理器MQ_TEST,在该队列管理器中我建立了一个本地队列MQ_Q以及一个服务器连接通道MQ_C,MQ_C中的MCA用户标识默认为空.同时 ...

  5. IBM MQ reason code list

    The reason code parameter (Reason) is a qualification to the completion code parameter (CompCode). I ...

  6. (转)IBM mq基本使用

    一.下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必须注册IBM ID,下载完成后一路Nex ...

  7. coreseek常见错误原因及解决方法

    coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和 ...

  8. 微信的redirect_uri参数错误原因分析

    我们可以根据微信的开发者文档  http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html 网页授权获取用户验证这一章来 ...

  9. TCP/IP 某些最常见的错误原因码 (errno)列表

    对于在基于 UNIX 的环境中的 TCP/IP 用户,下表列出了某些最常见的错误原因码 (errno).它不是完整的错误列表.可以在文件 /usr/include/sys/errno.h 中找到 Er ...

随机推荐

  1. 百篇大计敬本年之系统篇《六》—— Ubuntu 16.04开启 root 超级用户

    Ubuntu 16.04系统在一开始安装完成时是无法切换到 root 用户的,普通用户需要使用 root 权限的时候通常需要在执行命令前加 "sudo",需要经常使用root权限的 ...

  2. cxGrid使用汇总2

    17. 怎样设计多表头的cxGrid? 解决:cxGrid可以解决如下的表头: --------------------------------- | 说明1 | 说明2 | ------------ ...

  3. loadrunner协议的选择

    1. 任何高级协议的底层都是用Winsocket通信   2. 不管你系统中有多少个服务器,lr录制的始终是客户端与第一个服务器之间的通信内容, 客户端用IE访问的一般都选http协议(对于常见的,b ...

  4. AngularJS 学习笔记(1)

    AngularJS是一款前端JS框架.AngularJS官网 http://angularjs.org [开发环境准备]: 1,下载AngularJS:JS and CSS in Solution 2 ...

  5. ef codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题.

    需要在库程序包管理器里依次执行以下命令: 1.启用迁移功能:Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDbContext 2.建立 ...

  6. win7 开启休眠

    使用cmd命令进行开启,首先点击开始菜单,在“搜索程序和文件”中输入“cmd”,然后点击回车键.如下: 2 弹出如下图的界面,在其中最后的地方输入“powercfg -hibernate on”,然后 ...

  7. ueditor 单独图片上传 转载

    <body> <script type="text/javascript"> //这个是图片上传的,网上还有附件上传的 (function($) { var ...

  8. WPF button 如何区分click和doubleclick

    WPF button 同时处理两个事件时候会先触发click事件,触发doubleclick事件  ,那如何区分呢,可以这样设置: private static DispatcherTimer myC ...

  9. Linux中Bash发现重大安全漏洞修改方法

    北京时间9月25日消息,Linux用户今天又得到了一个“惊喜”!Red Hat安全团队在 Linux 中广泛使用的Bash shell中发现了一个隐晦而危险的安全漏洞.该漏洞被称为“Bash Bug” ...

  10. [转]oracle 实现插入自增列

    本文转自:http://blog.csdn.net/love_zt_love/article/details/7911104 刚使用oracle,它和sql server 好多地方还是有所不同的,简单 ...