我正在使用IBM.XMS 2.0.0.5和MQ Client 7.0.1.5并创建了一个连接,设置了异常监听器,启动了连接并开始使用消息监听器监听消息。这工作正常,但禁用网络连接时ExceptionListener
不会触发。相反,我得到一个未处理的套接字异常。
我回到了IBM站点上给出的示例并重新创建了错误:
如果我禁用网络连接,则会收到未处理的套接字异常,并且不会触发exceptionListener。
using System;
using System.Threading;
using IBM.XMS;
public class Sample
{
public static void Main()
{
XMSFactoryFactory factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
IConnectionFactory connectionFactory = factoryFactory.CreateConnectionFactory();
connectionFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, "**********");
connectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, "*****");
connectionFactory.SetIntProperty(XMSC.WMQ_PORT, 1414);
connectionFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
connectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "*********");
//
// Create the connection and register an exception listener
//
IConnection connection = connectionFactory.CreateConnection();
connection.ExceptionListener = new ExceptionListener(OnException);
ISession session = connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge);
IDestination queue = session.CreateQueue("queue://***********");
//
// Create the consumer and register an async message listener
//
IMessageConsumer consumer = session.CreateConsumer(queue);
consumer.MessageListener = new MessageListener(OnMessage);
connection.Start();
while (true)
{
Console.WriteLine("Waiting for messages....");
Thread.Sleep(1000);
}
}
static void OnMessage(IMessage msg)
{
Console.WriteLine(msg);
}
static void OnException(Exception ex)
{
Console.WriteLine(ex);
}
}
答案 0 :(得分:6)
我会把答案放在一边,希望能节省一些人为我浪费的时间。
您需要使用非托管客户端连接才能将异常侦听器连接到您的连接。
connectionFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE,XMSC.WMQ_CM_CLIENT_UNMANAGED);
答案 1 :(得分:0)
如果它只是在非托管模式下工作,那么这是XMS .NET v2.0.0.5的一个错误。它也应该在托管模式下工作(XMSC.WMQ_CM_CLIENT_MANAGED)。请转到最新的修订包并再次测试。