private void GetMessageContentIntoString( ref IBM.WMQ.MQMessage mqMessage, ref string messageContentAsString )
        {
            byte[] messageContentAsByteArray = null;
            getMessageContentIntoByteArray( ref mqMessage, ref messageContentAsByteArray );

            messageContentAsString = Utils.byteArrayToString( ref messageContentAsByteArray );
        }
        public void PutMessageWithNoSyncPoint( ref string queueName, ref IBM.WMQ.MQMessage mqMessage )
        {
            if( false == _existingQueues.ContainsKey( queueName ) )
                return;

            try
            {
                IBM.WMQ.MQPutMessageOptions mqPutMessageOptions         = new IBM.WMQ.MQPutMessageOptions();
                mqPutMessageOptions.Options|= IBM.WMQ.MQC.MQPMO_NO_SYNCPOINT;

                IBM.WMQ.MQQueue	queue = (IBM.WMQ.MQQueue) _existingQueues[ queueName ];
                queue.Put( mqMessage, mqPutMessageOptions );
            }

                // some nasty error 1
            catch( IBM.WMQ.MQException mqException )
            {
                String errorMessage = mqException.ToString();
                throw new Exception( errorMessage, mqException );
            }

                // some nasty error 2
            catch( Exception exception )
            {
                String errorMessage = exception.ToString();
                throw new Exception( errorMessage, exception );
            }
        }
        public void PutMessageWithNoSyncPoint( ref string queuName, ref byte[] messageContent )
        {
            IBM.WMQ.MQMessage   mqMessage = new IBM.WMQ.MQMessage();
            mqMessage.Write( messageContent );

            putMessageWithNoSyncPoint( ref queuName, ref mqMessage );
        }
        public void GetMessageWithSyncPoint( ref string queuName, ref byte[] messageContent, int timeOut )
        {
            IBM.WMQ.MQMessage mqMessage = null;
            getMessageWithSyncPoint( ref queuName, ref mqMessage, timeOut );

            messageContent = mqMessage.ReadBytes( mqMessage.DataLength );
        }
        public static byte[] ReadBytesEx(this IBM.WMQ.MQMessage message)
        {
            var result = message.ReadBytes(message.MessageLength);

            message.Seek(0);
            return(result);
        }
        public void GetMessageWithSyncPoint( ref string queuName, ref string messageContent, int timeOut )
        {
            IBM.WMQ.MQMessage mqMessage = null;
            getMessageWithSyncPoint( ref queuName, ref mqMessage, timeOut );

            byte[] messageContentAsByteArray = mqMessage.ReadBytes( mqMessage.DataLength );
            messageContent = Utils.byteArrayToString( ref messageContentAsByteArray );
        }
        public static IBM.WMQ.MQMessageDescriptor GetDescriptor(this IBM.WMQ.MQMessage message)
        {
            if (_fiMqmd == null)
            {
                _fiMqmd = typeof(IBM.WMQ.MQMessage).GetField("md", BindingFlags.NonPublic | BindingFlags.Instance);
            }

            return((IBM.WMQ.MQMessageDescriptor)_fiMqmd.GetValue(message));
        }
 public static string ReadStringEx(this IBM.WMQ.MQMessage message)
 {
     try
     {
         var srcEncoding = WsUtils.GetEncoding(message.CharacterSet);
         var bytes       = message.ReadBytes(message.MessageLength);
         message.Seek(0);
         var str = Encoding.Convert(srcEncoding, Encoding.UTF8, bytes);
         return(Encoding.UTF8.GetString(str));
     }
     catch (Exception)
     {
         // fallback option...
         var result = message.ReadString(message.MessageLength);
         message.Seek(0);
         return(result);
     }
 }
        public override bool Execute()
        {
            Log.LogMessage("Starting Websphere MQ Server " + QueueManagerName);

            IBM.WMQ.MQQueueManager queueManager = new IBM.WMQ.MQQueueManager(QueueManagerName);
                        Log.LogMessage("Opening queue " + InputQueueName);
            IBM.WMQ.MQQueue queue = queueManager.AccessQueue(InputQueueName, IBM.WMQ.MQC.MQOO_INPUT_SHARED);

            int count = 0;

            while (true)
            {
                try
                {
                    IBM.WMQ.MQMessage msg = new IBM.WMQ.MQMessage();
                    queue.Get(msg);

                    MemoryStream ms = new MemoryStream();
                    MemoryStream respStream = new MemoryStream();

                    MQUtil.MQMessageToStream(msg, ms);
                    msg.ClearMessage();

                    StreamUtil.ProcessClientBigRequest(ConnString, ms, respStream, false, null);

                    MQUtil.StreamToMQMessage(respStream, msg);
                    queueManager.Put(OutputQueueName, msg);
                    queueManager.Commit();

                    msg.ClearMessage();

                    count++;

                    Log.LogMessage("Processed " + count.ToString());
                }
                catch (IBM.WMQ.MQException ex)
                {
                    if (ex.ReasonCode != IBM.WMQ.MQC.MQRC_NO_MSG_AVAILABLE)
                        throw;
                    else
                        Thread.Sleep(50);
                }
            }
        }
        public void DeleteMessageWithSyncPoint( ref string queueName, ref byte[] corelationId )
        {
            if( false == _existingQueues.ContainsKey( queueName ) )
                return;

            try
            {
                IBM.WMQ.MQGetMessageOptions mqGetMessageOptions = new IBM.WMQ.MQGetMessageOptions();
                mqGetMessageOptions.Options|= IBM.WMQ.MQC.MQGMO_SYNCPOINT;
                mqGetMessageOptions.Options|= IBM.WMQ.MQC.MQGMO_WAIT;
                mqGetMessageOptions.WaitInterval = 1000;
                mqGetMessageOptions.Options|= IBM.WMQ.MQC.MQMO_MATCH_CORREL_ID;

                IBM.WMQ.MQMessage   mqMessage = new IBM.WMQ.MQMessage();
                mqMessage.CorrelationId = corelationId;

                IBM.WMQ.MQQueue	queue = (IBM.WMQ.MQQueue) _existingQueues[ queueName ];
                queue.Get( mqMessage, mqGetMessageOptions );
            }
            catch( IBM.WMQ.MQException mqException ) // some nasty error 1
            {
                string errorMessage = mqException.ToString();

                if( 2033 == mqException.ReasonCode ) // there is no message on the queue
                    throw new MqNoMessageException( errorMessage );
                else
                {
                    errorMessage = String.Format
                    (
                        "getMessageWithSyncPoint(): reasonCode={0}, details={1}",
                        mqException.ReasonCode,
                        mqException.ToString()
                    );

                    throw new Exception( errorMessage );
                }
            }
            catch( Exception exception ) // some nasty error 2
            {
                throw new Exception( exception );
            }
        }
 private void GetMessageContentIntoByteArray( ref IBM.WMQ.MQMessage mqMessage, ref byte[] messageContentAsByteArray )
 {
     messageContentAsByteArray = mqMessage.ReadBytes( mqMessage.DataLength );
 }
 public void GetMessageWithSyncPoint(ref string queuName, ref IBM.WMQ.MQMessage mqMessage)
 {
     const int c_timeOut = 1000;
     getMessageWithSyncPoint( ref queuName, ref mqMessage, c_timeOut );
 }
        public override bool Execute()
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();

            Log.LogMessage("Starting Websphere MQ transfer with " + TotalBatches.ToString() + " batchs with " + BatchSize.ToString() + " items each");

            queueManager = new IBM.WMQ.MQQueueManager(QueueManagerName);
            messageCount = TotalBatches;

            inputQueue = queueManager.AccessQueue(InputQueueName, IBM.WMQ.MQC.MQOO_INPUT_SHARED);
            Thread t = new Thread(ProcessMQQueue);
            t.Start();

            int count = 1;
            for (int i = 0; i < TotalBatches; i++)
            {
                IBM.WMQ.MQMessage msg = new IBM.WMQ.MQMessage();

                MemoryStream ms = new MemoryStream();
                StreamUtil.GenerateBigRequest(ms, false, count, count + (BatchSize - 1));
                MQUtil.StreamToMQMessage(ms, msg);
                queueManager.Put(OutputQueueName, msg);
                count += BatchSize;
                Log.LogMessage("Sent " + count.ToString());
            }

            while (!finished)
                Thread.Sleep(250);

            watch.Stop();
            Log.LogMessage("Total processing time: " + watch.Elapsed.TotalSeconds.ToString("0.00") + " seconds");

            return true;
        }
        private void ProcessMQQueue()
        {
            bool keepListening = true;
            while (keepListening)
            {
                try
                {
                    IBM.WMQ.MQMessage msg = new IBM.WMQ.MQMessage();
                    inputQueue.Get(msg);
                    queueManager.Commit();
                    messageCount--;

                    MemoryStream ms = new MemoryStream();
                    MQUtil.MQMessageToStream(msg, ms);
                    msg.ClearMessage();

                    Log.LogMessage("Waiting for more " + messageCount.ToString());

                    StreamUtil.ImportarStream(ConnString, ms);

                    if (messageCount <= 0)
                    {
                        keepListening = false;
                        finished = true;
                    }
                }
                catch (IBM.WMQ.MQException exception)
                {
                    if (exception.ReasonCode != IBM.WMQ.MQC.MQRC_NO_MSG_AVAILABLE)
                        throw;
                    else
                        Thread.Sleep(100);
                }

            }
        }