我正在使用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);
}
}发布于 2011-06-30 22:06:21
我会把答案放在网上,希望它能节省一些人为我浪费的时间。
您需要使用非托管客户端连接才能将异常侦听器连接到您的连接。
connectionFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE,XMSC.WMQ_CM_CLIENT_UNMANAGED);
发布于 2013-09-01 18:39:48
如果它只是在非托管模式下工作,那么它就是XMS .NET v2.0.0.5中的一个bug。它也应该在托管模式下工作(XMSC.WMQ_CM_CLIENT_MANAGED)。请移动到最新的修复包并再次测试。
https://stackoverflow.com/questions/6506593
复制相似问题