GetReturnAddress() 공개 정적인 메소드

public static GetReturnAddress ( string replyToString, string destinationMachine ) : string
replyToString string
destinationMachine string
리턴 string
예제 #1
0
        public void Should_fetch_the_replytoaddress_from_responsequeue_for_backwards_compatibility()
        {
            var transportMessage = new TransportMessage();


            var message = MsmqUtilities.Convert(transportMessage);

            message.ResponseQueue = new MessageQueue(MsmqUtilities.GetReturnAddress("local", "destination"));
            var result = MsmqUtilities.Convert(message);

            Assert.AreEqual("local@" + Environment.MachineName, result.Headers[Headers.ReplyToAddress]);
        }
예제 #2
0
        void ISendMessages.Send(TransportMessage message, Address address)
        {
            var queuePath = MsmqUtilities.GetFullPath(address);

            try
            {
                using (var q = new MessageQueue(queuePath, QueueAccessMode.Send))
                {
                    var toSend = MsmqUtilities.Convert(message);

                    toSend.UseDeadLetterQueue = UseDeadLetterQueue;
                    toSend.UseJournalQueue    = UseJournalQueue;

                    if (message.ReplyToAddress != null)
                    {
                        toSend.ResponseQueue = new MessageQueue(MsmqUtilities.GetReturnAddress(message.ReplyToAddress.ToString(), address.ToString()));
                    }

                    q.Send(toSend, GetTransactionTypeForSend());

                    message.Id = toSend.Id;
                }
            }
            catch (MessageQueueException ex)
            {
                string msg = string.Empty;
                if (ex.MessageQueueErrorCode == MessageQueueErrorCode.QueueNotFound)
                {
                    if (address == null)
                    {
                        msg = "Failed to send message.";
                    }
                    else
                    {
                        msg = string.Format("Failed to send message to address: {0}@{1}", address.Queue, address.Machine);
                    }
                }

                throw new QueueNotFoundException(address, msg, ex);
            }
            catch (Exception ex)
            {
                if (address == null)
                {
                    throw new FailedToSendMessageException("Failed to send message.", ex);
                }
                else
                {
                    throw new FailedToSendMessageException(string.Format("Failed to send message to address: {0}@{1}", address.Queue, address.Machine), ex);
                }
            }
        }
예제 #3
0
        void ISendMessages.Send(TransportMessage message, Address address)
        {
            var queuePath = MsmqUtilities.GetFullPath(address);

            try
            {
                using (var q = new MessageQueue(queuePath, false, true, QueueAccessMode.Send))
                {
                    using (Message toSend = MsmqUtilities.Convert(message))
                    {
                        toSend.UseDeadLetterQueue = UseDeadLetterQueue;
                        toSend.UseJournalQueue    = UseJournalQueue;

                        if (message.ReplyToAddress != null)
                        {
                            toSend.ResponseQueue = new MessageQueue(MsmqUtilities.GetReturnAddress(message.ReplyToAddress.ToString(), address.ToString()));
                        }


                        q.Send(toSend, GetTransactionTypeForSend());

                        message.Id = toSend.Id;
                    }
                }
            }
            catch (MessageQueueException ex)
            {
                if (ex.MessageQueueErrorCode == MessageQueueErrorCode.QueueNotFound)
                {
                    var msg = address == null
                                     ? "Failed to send message. Target address is null."
                                     : string.Format("Failed to send message to address: [{0}]", address);

                    throw new QueueNotFoundException(address, msg, ex);
                }

                ThrowFailedToSendException(address, ex);
            }
            catch (Exception ex)
            {
                ThrowFailedToSendException(address, ex);
            }
        }
예제 #4
0
        void ISendMessages.Send(TransportMessage message, Address address)
        {
            var queuePath = MsmqUtilities.GetFullPath(address);

            using (var q = new MessageQueue(queuePath, QueueAccessMode.Send))
            {
                var toSend = MsmqUtilities.Convert(message);

                toSend.UseDeadLetterQueue = UseDeadLetterQueue;
                toSend.UseJournalQueue    = UseJournalQueue;

                if (message.ReplyToAddress != null)
                {
                    toSend.ResponseQueue = new MessageQueue(MsmqUtilities.GetReturnAddress(message.ReplyToAddress.ToString(), address.ToString()));
                }

                try
                {
                    q.Send(toSend, GetTransactionTypeForSend());
                }
                catch (MessageQueueException ex)
                {
                    if (ex.MessageQueueErrorCode == MessageQueueErrorCode.QueueNotFound)
                    {
                        throw new QueueNotFoundException {
                                  Queue = address
                        }
                    }
                    ;

                    throw;
                }

                message.Id = toSend.Id;
            }
        }
예제 #5
0
        public void Send(TransportMessage message, string destination)
        {
            var address = MsmqUtilities.GetFullPath(destination);

            using (var q = new MessageQueue(address, QueueAccessMode.Send))
            {
                var toSend = new Message();

                if (message.Body != null)
                {
                    toSend.BodyStream = new MemoryStream(message.Body);
                }

                if (message.CorrelationId != null)
                {
                    toSend.CorrelationId = message.CorrelationId;
                }

                toSend.Recoverable        = message.Recoverable;
                toSend.UseDeadLetterQueue = UseDeadLetterQueue;
                toSend.UseJournalQueue    = UseJournalQueue;

                if (!string.IsNullOrEmpty(message.ReturnAddress))
                {
                    toSend.ResponseQueue = new MessageQueue(MsmqUtilities.GetReturnAddress(message.ReturnAddress, destination));
                }

                if (message.TimeToBeReceived < MessageQueue.InfiniteTimeout)
                {
                    toSend.TimeToBeReceived = message.TimeToBeReceived;
                }

                if (message.Headers == null)
                {
                    message.Headers = new Dictionary <string, string>();
                }

                if (!message.Headers.ContainsKey(HeaderKeys.IDFORCORRELATION))
                {
                    message.Headers.Add(HeaderKeys.IDFORCORRELATION, null);
                }

                if (String.IsNullOrEmpty(message.Headers[HeaderKeys.IDFORCORRELATION]))
                {
                    message.Headers[HeaderKeys.IDFORCORRELATION] = message.IdForCorrelation;
                }

                using (var stream = new MemoryStream())
                {
                    headerSerializer.Serialize(stream, message.Headers.Select(pair => new HeaderInfo {
                        Key = pair.Key, Value = pair.Value
                    }).ToList());
                    toSend.Extension = stream.GetBuffer();
                }

                toSend.AppSpecific = (int)message.MessageIntent;

                try
                {
                    q.Send(toSend, GetTransactionTypeForSend());
                }
                catch (MessageQueueException ex)
                {
                    if (ex.MessageQueueErrorCode == MessageQueueErrorCode.QueueNotFound)
                    {
                        throw new QueueNotFoundException {
                                  Queue = destination
                        }
                    }
                    ;

                    throw;
                }

                message.Id = toSend.Id;
            }
        }