我已成功运行MQ客户端,并且可以使用它来获取消息。
我们已经设置了必要的环境变量: MQCHLLIB和MQCHLTAB以及MQSSLKEYR。
.TAB文件位于右侧文件夹中。 但是当我执行以下代码时:
private static bool ConnectMq()
{
try
{
queueManager = new MQQueueManager("ECG_MBTST_QM", Init(false));
queueManager.Connect();
if (queueManager.IsConnected)
{
Console.WriteLine("Connected...");
}
return true;
}
catch (MQException exp)
{
Console.WriteLine("Exception Message: " + exp.Message);
}
catch (Exception exp)
{
Console.WriteLine("Exception: " + exp.Message);
}
return false;
}
private static Hashtable Init()
{
Hashtable properties;
properties = new Hashtable
{
{MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT}
};
return properties;
}
我收到了所描述的错误消息。 我别无选择,只能使用CCDT文件,因为这是服务器主机指定的内容。 我相信服务器是v7,我正在引用v8 WMQ库。 理论上这应该有用。
我也试过使用标准的属性集(为了安全起见,值已被更改):
properties = new Hashtable
{
{MQC.TRANSPORT_PROPERTY, "TCP"},
{MQC.CHANNEL_PROPERTY, "Channel"},
{MQC.CONNECTION_NAME_PROPERTY, "IBM_MQ_Conn"},
{MQC.PORT_PROPERTY, "1414"},
{MQC.HOST_NAME_PROPERTY, "IP Address"},
{MQC.SSL_CIPHER_SPEC_PROPERTY, "TLS_RSA_WITH_AES_128_CBC_SHA"}
};
但是当我使用上述属性时,我收到2538错误 - 主机不可用。 关于如何一起使用CCDT文件和C#,我有什么遗漏吗?
提前致谢。
编辑 - 按照JoshMC的要求
这是AMQERR01.LOG文件中的最新条目:
1/18/2017 1:51:05 AM - Process(3272.1) User(andrewhuntley) Program( MQ app.exe)
AMQ9202: Remote host '192.168.150.102' not available, retry later.
EXPLANATION:
The attempt to allocate a conversation using TCP/IP to host '192.168.150.102'
for channel (Exception) was not successful. However the error may be a
transitory one and it may be possible to successfully allocate a TCP/IP
conversation later.
In some cases the remote host cannot be determined and so is shown as '????'.
ACTION:
Try the connection again later. If the failure persists, record the error
values and contact your systems administrator. The return code from TCP/IP is 0
(X'0'). The reason for the failure may be that this host cannot reach the
destination host. It may also be possible that the listening program at host
'192.168.150.102' was not running. If this is the case, perform the relevant
operations to start the TCP/IP listening program, and try again.
----- MQTCPConnection.cs : 357 ------------------------------------------------
请注意,服务器已启动并正在运行且可访问,因为我可以使用已安装的IBM客户端连接到该服务器。
答案 0 :(得分:1)
NuGet Managed IBM WebSphere MQ Client for .NET使用IBM MQ 8.0.0.5 MQ库。
我在IBM找到了这个APAR IT14222,它似乎与您收到的确切错误消息相匹配。
这应该在下一个fixpack 8.0.0.6中修复,它应该在2017年3月底之前完成。如果你有IBM支持合同,你也可以打开PMR并要求他们为你提供一份副本。受影响的dll,包含针对此APAR的修复程序,包含8.0.0.5。
答案 1 :(得分:1)
迟到了这个问题。
NuGet提供的MQ .NET客户端不是来自IBM。它明确提到"非官方"。
它只能在.NET托管模式下使用,而不能在绑定或.NET未管理客户端模式下使用,因为它没有其他依赖库。
IBM.WMQ.Nmqi.UnmanagedNmqiMQ
异常是因为MQ C客户端库不存在。您可以使用MQC.TRANSPORT_MQSERIES_MANAGED
的{{1}}值来解决异常,或者安装"如果要使用MQC.TRANSPORT_PROPERTY
选项