IBM.XMS ExceptionListener未触发

时间:2011-06-28 12:44:48

标签: ibm-mq

我正在使用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);
    }
}

2 个答案:

答案 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)。请转到最新的修订包并再次测试。