public void Send()

in src/main/csharp/MessageProducer.cs [111:211]


        public void Send(IDestination destination, IMessage message, MsgDeliveryMode deliveryMode, MsgPriority priority, TimeSpan timeToLive)
        {
            MessageQueue mq = null;

            try
            {
                // Locate the MSMQ Queue we will be sending to
                if(messageQueue != null)
                {
                    if(destination == null)
                    {
                        throw new InvalidDestinationException("This producer can only be used to send to: " + destination);
                    }

                    if(destination.Equals(this.destination))
                    {
                        mq = messageQueue;
                    }
                    else
                    {
                        throw new NotSupportedException("This producer can only be used to send to: " + destination);
                    }
                }
                else
                {
                    if(destination == null)
                    {
                        throw new NotSupportedException();
                    }

                    mq = OpenMessageQueue((Destination) destination);
                }

                if(this.ProducerTransformer != null)
                {
                    IMessage transformed = this.ProducerTransformer(this.session, this, message);
                    if(transformed != null)
                    {
                        message = transformed;
                    }
                }

                message.NMSDeliveryMode = deliveryMode;
                message.NMSTimeToLive = timeToLive;
                message.NMSPriority = priority;
                if(!DisableMessageTimestamp)
                {
                    message.NMSTimestamp = DateTime.UtcNow;
                }

                if(!DisableMessageID)
                {
                    // TODO: message.NMSMessageId =
                }

                // Convert the Message into a MSMQ message
                Message msg = session.MessageConverter.ToMsmqMessage(message);

                if(mq.Transactional)
                {
                    if(session.Transacted)
                    {
                        mq.Send(msg, session.MessageQueueTransaction);

                    }
                    else
                    {
                        // Start our own mini transaction here to send the message.
                        using(MessageQueueTransaction transaction = new MessageQueueTransaction())
                        {
                            transaction.Begin();
                            mq.Send(msg, transaction);
                            transaction.Commit();
                        }
                    }
                }
                else
                {
                    if(session.Transacted)
                    {
                        // We may want to raise an exception here since app requested
                        // a transeced NMS session, but is using a non transacted message queue
                        // For now silently ignore it.
                    }
                    mq.Send(msg);
                }

                message.NMSMessageId = msg.Id;
                if(message.NMSCorrelationID == null)
                {
                    message.NMSCorrelationID = msg.CorrelationId;
                }
            }
            finally
            {
                if(mq != null && mq != messageQueue)
                {
                    mq.Dispose();
                }
            }
        }