void InnerSendBatch(Action <EnvelopeBuilder> configure, object[] messageItems)
        {
            if (messageItems.Length == 0)
            {
                return;
            }

            var id = _idGenerator();

            var builder = new EnvelopeBuilder(id);

            foreach (var item in messageItems)
            {
                builder.AddItem(item);
            }

            configure(builder);
            var envelope = builder.Build();

            var queue = GetOutboundQueue();

            if (Transaction.Current == null)
            {
                queue.PutMessage(envelope);
                _observer.Notify(new EnvelopeSent(queue.Name, envelope.EnvelopeId, false,
                                                  envelope.Items.Select(x => x.MappedType.Name).ToArray()));
            }
            else
            {
                var action = new CommitActionEnlistment(() =>
                {
                    queue.PutMessage(envelope);
                    _observer.Notify(new EnvelopeSent(queue.Name, envelope.EnvelopeId, true,
                                                      envelope.Items.Select(x => x.MappedType.Name).ToArray()));
                });
                Transaction.Current.EnlistVolatile(action, EnlistmentOptions.None);
            }
        }
        void InnerSendBatch(Action<EnvelopeBuilder> configure, object[] messageItems)
        {
            if (messageItems.Length == 0)
                return;

            var id = _idGenerator();

            var builder = new EnvelopeBuilder(id);
            foreach (var item in messageItems)
            {
                builder.AddItem(item);
            }

            configure(builder);
            var envelope = builder.Build();

            var queue = GetOutboundQueue();

            if (Transaction.Current == null)
            {
                queue.PutMessage(envelope);
                _observer.Notify(new EnvelopeSent(queue.Name, envelope.EnvelopeId, false,
                    envelope.Items.Select(x => x.MappedType.Name).ToArray()));
            }
            else
            {
                var action = new CommitActionEnlistment(() =>
                    {
                        queue.PutMessage(envelope);
                        _observer.Notify(new EnvelopeSent(queue.Name, envelope.EnvelopeId, true,
                            envelope.Items.Select(x => x.MappedType.Name).ToArray()));
                    });
                Transaction.Current.EnlistVolatile(action, EnlistmentOptions.None);
            }
        }