TransportOutputChannel.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / TransportOutputChannel.cs / 1 / TransportOutputChannel.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.ServiceModel.Channels 
{
    using System.Collections.Generic; 
    using System.ServiceModel; 
    using System.Diagnostics;
    using System.Xml; 

    abstract class TransportOutputChannel : OutputChannel
    {
        bool anyHeadersToAdd; 
        bool manualAddressing;
        MessageVersion messageVersion; 
        EndpointAddress to; 
        Uri via;
        ToHeader toHeader; 

        protected TransportOutputChannel(ChannelManagerBase channelManager, EndpointAddress to, Uri via, bool manualAddressing, MessageVersion messageVersion)
            : base(channelManager)
        { 
            this.manualAddressing = manualAddressing;
            this.messageVersion = messageVersion; 
            this.to = to; 
            this.via = via;
 
            if (!manualAddressing && to != null)
            {
                Uri toUri;
                if (to.IsAnonymous) 
                {
                    toUri = this.messageVersion.Addressing.AnonymousUri; 
                } 
                else if (to.IsNone)
                { 
                    toUri = this.messageVersion.Addressing.NoneUri;
                }
                else
                { 
                    toUri = to.Uri;
                } 
 
                XmlDictionaryString dictionaryTo = new ToDictionary(toUri.AbsoluteUri).To;
                this.toHeader = ToHeader.Create(toUri, dictionaryTo, messageVersion.Addressing); 

                this.anyHeadersToAdd = to.Headers.Count > 0;
            }
        } 

        protected bool ManualAddressing 
        { 
            get
            { 
                return this.manualAddressing;
            }
        }
 
        public MessageVersion MessageVersion
        { 
            get 
            {
                return this.messageVersion; 
            }
        }

        public override EndpointAddress RemoteAddress 
        {
            get 
            { 
                return this.to;
            } 
        }

        public override Uri Via
        { 
            get
            { 
                return this.via; 
            }
        } 

        protected override void AddHeadersTo(Message message)
        {
            base.AddHeadersTo(message); 

            if (toHeader != null) 
            { 
                // we don't use to.ApplyTo(message) since it's faster to cache and
                // use the actual  header then to call message.Headers.To = Uri... 
                message.Headers.SetToHeader(toHeader);
                if (anyHeadersToAdd)
                {
                    to.Headers.AddHeadersTo(message); 
                }
            } 
        } 

        class ToDictionary : IXmlDictionary 
        {
            XmlDictionaryString to;

            public ToDictionary(string to) 
            {
                this.to = new XmlDictionaryString(this, to, 0); 
            } 

            public XmlDictionaryString To 
            {
                get
                {
                    return to; 
                }
            } 
 
            public bool TryLookup(string value, out XmlDictionaryString result)
            { 
                if (value == null)
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
                if (value == to.Value)
                { 
                    result = to;
                    return true; 
                } 
                result = null;
                return false; 
            }

            public bool TryLookup(int key, out XmlDictionaryString result)
            { 
                if (key == 0)
                { 
                    result = to; 
                    return true;
                } 
                result = null;
                return false;
            }
 
            public bool TryLookup(XmlDictionaryString value, out XmlDictionaryString result)
            { 
                if (value == null) 
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
                if (value == to) 
                {
                    result = to;
                    return true;
                } 
                result = null;
                return false; 
            } 
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK