Note that there are some explanatory texts on larger screens.

plurals
  1. POHow do I get Websphere MQ connection status and how do I reset the connection:
    primarykey
    data
    text
    <p>1.) From a .net client, how do I test if the client is connected to the server (i.e. can send and receive) Yes, I could send a message inside a try block and catch the ensuing exception but I'm hoping for a more elegant solution.</p> <p>2) How do I open, close, and re-open connections? In my attempts to resolve question 1 above I discovered that if I open a connection then call connection.Close() I am not able to obtain another connection from the connection factory (see code fragment below). I receive error message XMSCC0008</p> <p>I am using a very standard vanilla MQ configuration . Here is how my client connects:</p> <pre><code>ISession session = MQAccess.GetSession(MQAccess.Connection); IDestination destination = session.CreateTopic(SubTopicName); Consumer = MQAccess.GetConsumer(session, destination); Consumer.MessageListener = new MessageListener(HandleMQSubEvent); MQAccess.Connection.Start(); </code></pre> <p>where MQAccess is a small utility class.</p> <p>Edited the question to add MQAccess code:</p> <pre><code>public static class MQAccess { public static readonly MQConfigurationSectionHandler ConfigSettings; public static readonly IConnectionFactory ConnectionFactory; private static readonly IConnection connection; public static IConnection Connection { get { return connection; } } static MQAccess() { ConfigSettings = (MQConfigurationSectionHandler) ConfigurationManager.GetSection("mq-configuration"); XMSFactoryFactory factory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ); ConnectionFactory = factory.CreateConnectionFactory(); ConnectionFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, ConfigSettings.Hostname); ConnectionFactory.SetIntProperty(XMSC.WMQ_PORT, ConfigSettings.Port); ConnectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, ConfigSettings.Channel); if (ConfigSettings.QueueManager == string.Empty) { ConnectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, ""); } else { ConnectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, ConfigSettings.QueueManager); } connection = GetConnection(); } public static IConnection GetConnection() { return ConnectionFactory.CreateConnection(); } public static ISession GetSession(IConnection connection) { return connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge); } public static IMessageProducer GetProducer(ISession session, IDestination destination) { return session.CreateProducer(destination); } public static IMessageConsumer GetConsumer(ISession session, IDestination destination) { return session.CreateConsumer(destination); } public static void MQPub(string TopicURI, string message) { using (var session = GetSession(Connection)) { using (var destination = session.CreateTopic(TopicURI)) { using (var producer = GetProducer(session, destination)) { producer.Send(session.CreateTextMessage(message)); } } } } public static void MQPub(string TopicURI, IEnumerable&lt;string&gt; messages) { using (var session = GetSession(Connection)) { using (var destination = session.CreateTopic(TopicURI)) { using (var producer = GetProducer(session, destination)) { foreach (var message in messages) { producer.Send(session.CreateTextMessage(message)); } } } } } } </code></pre> <p>Edit: Renamed MQAccess class to MQClient. Made it an instance class per T Rob suggestion. Disconnect method still crashes with error msgs listed above</p> <pre><code>public class MQClient : IDisposable { public MQConfigurationSectionHandler ConfigSettings { get; private set; } public IConnectionFactory ConnectionFactory { get; private set; } public IConnection Connection { get; private set; } public IMessageConsumer Consumer { get; private set; } public IMessageProducer Producer { get; private set; } // Save sessions as fields for disposing and future subscription functionality private ISession ProducerSession; private ISession ConsumerSession; public string SubTopicName { get; private set; } public string PubTopicName { get; private set; } public bool IsConnected { get; private set; } public event Action&lt;Exception&gt; ConnectionError; private Action&lt;IMessage&gt; IncomingMessageHandler; public MQClient(string subTopicName, string pubTopicName, Action&lt;IMessage&gt; incomingMessageHandler) { // Dont put connect logic in the constructor. If we lose the connection we may need to connect again. SubTopicName = subTopicName; PubTopicName = pubTopicName; IncomingMessageHandler = incomingMessageHandler; } public string Connect() { IsConnected = false; string errorMsg = string.Empty; ConfigSettings = (MQConfigurationSectionHandler) ConfigurationManager.GetSection("mq-configuration"); XMSFactoryFactory factory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ); ConnectionFactory = factory.CreateConnectionFactory(); ConnectionFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, ConfigSettings.Hostname); ConnectionFactory.SetIntProperty(XMSC.WMQ_PORT, ConfigSettings.Port); ConnectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, ConfigSettings.Channel); if (ConfigSettings.QueueManager == string.Empty) ConnectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, ""); else ConnectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, ConfigSettings.QueueManager); Connection = ConnectionFactory.CreateConnection(); if (!string.IsNullOrEmpty(PubTopicName)) { ProducerSession = Connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge); Producer = ProducerSession.CreateProducer(ProducerSession.CreateTopic(PubTopicName)); } if (!string.IsNullOrEmpty(SubTopicName) &amp;&amp; IncomingMessageHandler != null) { ConsumerSession = Connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge); Consumer = ConsumerSession.CreateConsumer(ConsumerSession.CreateTopic(SubTopicName)); Consumer.MessageListener = new MessageListener(IncomingMessageHandler); } try { Connection.Start(); Connection.ExceptionListener = new ExceptionListener(ConnectionExceptionHandler); IsConnected = true; } catch (TypeInitializationException ex) { errorMsg = "A TypeInitializationException error occured while attempting to connect to MQ. Check the Queue configuration in App.config. The error message is: " + ex.Message; } catch (IllegalStateException ex) { errorMsg = "An IllegalStateException error occured while attempting to connect to MQ. Check the Queue configuration in App.config. The error message is: " + ex.Message; } return errorMsg; } public void Disconnect() { if (Producer != null) { Producer.Close(); Producer.Dispose(); Producer = null; } if (ProducerSession != null) { // Call Unsubscribe here if subscription is durable ProducerSession.Close(); ProducerSession.Dispose(); ProducerSession = null; } if (Connection != null) { Connection.Stop(); //if (Connection.ExceptionListener != null) // Connection.ExceptionListener = null; // Per Shashi............ //if (Consumer.MessageListener != null) // Consumer.MessageListener = null; Connection.Close(); Connection.Dispose(); Connection = null; } if (Consumer != null) { if (Consumer.MessageListener != null) Consumer.MessageListener = null; Consumer.Close(); Consumer.Dispose(); Consumer = null; } if (ConsumerSession != null) { // Call Unsubscribe here if subscription is durable ConsumerSession.Close(); ConsumerSession.Dispose(); ConsumerSession = null; } IsConnected = false; } public void Publish(string message) { Producer.Send(ProducerSession.CreateTextMessage(message)); } public void Publish(string[] messages) { foreach (string msg in messages) Publish(msg); } public void ConnectionExceptionHandler(Exception ex) { Disconnect(); // Clean up if (ConnectionError != null) ConnectionError(ex); } #region IDisposable Members private bool disposed; public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!this.disposed) { if (disposing) Disconnect(); disposed = true; } } #endregion } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload