예제 #1
0
        public void SendEnvelope(ImmutableEnvelope envelope)
        {
            var queue = GetOutboundQueue();

            if (Transaction.Current == null)
            {
                SystemObserver.Notify(
                    new EnvelopeSent(queue.Name, envelope.EnvelopeId, false,
                                     envelope.Items.Select(x => x.MappedType.Name).ToArray(), envelope.GetAllAttributes()));

                queue.PutMessage(envelope);
            }
            else
            {
                var action = new CommitActionEnlistment(() =>
                {
                    SystemObserver.Notify(
                        new EnvelopeSent(
                            queue.Name,
                            envelope.EnvelopeId,
                            true,
                            envelope.Items.Select(x => x.MappedType.Name).ToArray(), envelope.GetAllAttributes()
                            ));

                    queue.PutMessage(envelope);
                });

                Transaction.Current.EnlistVolatile(action, EnlistmentOptions.None);
            }
        }
예제 #2
0
        public void SendEnvelope(ImmutableEnvelope envelope)
        {
            var queue = GetOutboundQueue();
            var data  = _streamer.SaveEnvelopeData(envelope);

            if (Transaction.Current == null)
            {
                queue.PutMessage(data);

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