File: System\ServiceModel\MsmqIntegration\MsmqIntegrationMessageProperty.cs
Project: ndp\cdf\src\WCF\ServiceModel\System.ServiceModel.csproj (System.ServiceModel)
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.MsmqIntegration
{
    using System.ComponentModel;
    using System.Messaging;
    using System.Runtime;
 
    public sealed class MsmqIntegrationMessageProperty
    {
        public const string Name = "MsmqIntegrationMessageProperty";
 
        public static MsmqIntegrationMessageProperty Get(System.ServiceModel.Channels.Message message)
        {
            if (null == message)
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message");
            if (null == message.Properties)
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message.Properties");
 
            return message.Properties[Name] as MsmqIntegrationMessageProperty;
        }
 
        object body;
        public object Body 
        {
            get { return this.body; }
            set { this.body = value; }
        }
 
        AcknowledgeTypes? acknowledgeType = null;
        public AcknowledgeTypes? AcknowledgeType
        {
            get { return this.acknowledgeType; }
            set { this.acknowledgeType = value; }
        }
 
        Acknowledgment? acknowledgment = null;
        public Acknowledgment? Acknowledgment
        {
            get { return this.acknowledgment; }
            internal set { this.acknowledgment = value; }
        }
            
        Uri administrationQueue = null;
        public Uri AdministrationQueue
        {
            get { return this.administrationQueue; }
            set { this.administrationQueue = value; }
        }
        
        int? appSpecific = null;
        public int? AppSpecific
        {
            get { return this.appSpecific; }
            set { this.appSpecific = value; }
        }
        
        DateTime? arrivedTime = null;
        public DateTime? ArrivedTime 
        {
            get { return this.arrivedTime; }
            internal set { this.arrivedTime = value; }
        }
 
        bool? authenticated = null;
        public bool? Authenticated 
        {
            get { return this.authenticated; }
            internal set { this.authenticated = value; }
        }
 
        int? bodyType = null;
        public int? BodyType
        {
            get { return this.bodyType; }
            set { this.bodyType = value; }
        }
 
        string correlationId = null;
        public string CorrelationId
        {
            get { return this.correlationId; }
            set { this.correlationId = value; }
        }
        
        Uri destinationQueue = null;
        public Uri DestinationQueue
        {
            get { return this.destinationQueue; }
            internal set { this.destinationQueue = value; }
        }
 
        byte[] extension = null;
        public byte[] Extension
        {
            get { return this.extension; }
            set { this.extension = value; }
        }
 
        string id = null;
        public string Id
        {
            get { return this.id; }
            internal set { this.id = value; }
        }
 
        string label = null;
        public string Label
        {
            get { return this.label; }
            set { this.label = value; }
        }
 
        MessageType? messageType = null;
        public MessageType? MessageType
        {
            get { return this.messageType; }
            internal set { this.messageType = value; }
        }
 
        MessagePriority? priority = null;
        public MessagePriority? Priority
        {
            get { return this.priority; }
            set 
            { 
                ValidateMessagePriority(value);
                this.priority = value; 
            }
        }
        
        Uri responseQueue = null;
        public Uri ResponseQueue
        {
            get { return this.responseQueue; }
            set { this.responseQueue = value; }
        }
        
        byte[] senderId = null;
        public byte[] SenderId 
        {
            get { return this.senderId; }
            internal set { this.senderId = value; }
        }
 
        DateTime? sentTime = null;
        public DateTime? SentTime 
        {
            get { return this.sentTime; }
            internal set { this.sentTime = value; }
        }
        
        TimeSpan? timeToReachQueue = null;
        public TimeSpan? TimeToReachQueue
        {
            get { return this.timeToReachQueue; }
            set 
            { 
                ValidateTimeToReachQueue(value);
                this.timeToReachQueue = value; 
            }
        }
 
        internal void InternalSetTimeToReachQueue(TimeSpan timeout)
        {
            this.timeToReachQueue = timeout;
        }
 
        static void ValidateMessagePriority(MessagePriority? priority)
        {
            if (priority.HasValue && (priority.Value < MessagePriority.Lowest || priority.Value > MessagePriority.Highest))
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidEnumArgumentException("priority", (int)priority, typeof(MessagePriority)));
        }
 
        static void ValidateTimeToReachQueue(TimeSpan? timeout)
        {
            if (timeout.HasValue && timeout.Value < TimeSpan.Zero)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", timeout,
                    SR.GetString(SR.SFxTimeoutOutOfRange0)));
            }
 
            if (timeout.HasValue && TimeoutHelper.IsTooLarge(timeout.Value))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", timeout,
                    SR.GetString(SR.SFxTimeoutOutOfRangeTooBig)));
            }
 
        }
    }
}