SoapUnknownHeader.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Web / System / Web / Services / Protocols / SoapUnknownHeader.cs / 1305376 / SoapUnknownHeader.cs

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

namespace System.Web.Services.Protocols { 
    using System.Web.Services; 
    using System.Xml.Serialization;
    using System; 
    using System.Reflection;
    using System.Xml;
    using System.Collections;
    using System.IO; 
    using System.ComponentModel;
 
    ///  
    /// 
    ///    [To be supplied.] 
    /// 
    public sealed class SoapUnknownHeader : SoapHeader {
        XmlElement element;
 
        /// 
        ///  
        ///    [To be supplied.] 
        /// 
        [XmlIgnore] 
        public XmlElement Element {
            get {
                if (element == null) return null;
 
                if (version == SoapProtocolVersion.Soap12) {
                    // need to fix up mustUnderstand and actor attributes for soap 1.2 
                    if (InternalMustUnderstand) { 
                        element.SetAttribute(Soap.Attribute.MustUnderstand, Soap12.Namespace, "1");
                    } 
                    element.RemoveAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace);
                    string actor = InternalActor;
                    if (actor != null && actor.Length != 0) {
                        element.SetAttribute(Soap12.Attribute.Role, Soap12.Namespace, actor); 
                    }
                    element.RemoveAttribute(Soap.Attribute.Actor, Soap.Namespace); 
                } 
                else if (version == SoapProtocolVersion.Soap11) {
                    // need to fix up mustUnderstand and actor attributes for soap 1.1 
                    // also remove relay attribute since it only applies to soap 1.2
                    if (InternalMustUnderstand) {
                        element.SetAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace, "1");
                    } 
                    element.RemoveAttribute(Soap.Attribute.MustUnderstand, Soap12.Namespace);
                    string actor = InternalActor; 
                    if (actor != null && actor.Length != 0) { 
                        element.SetAttribute(Soap.Attribute.Actor, Soap.Namespace, actor);
                    } 
                    element.RemoveAttribute(Soap12.Attribute.Role, Soap12.Namespace);
                    element.RemoveAttribute(Soap12.Attribute.Relay, Soap12.Namespace);
                }
 
                return element;
            } 
            set { 
                if (value == null && element != null) {
                    // save off the mustUnderstand/actor values before they go away 
                    base.InternalMustUnderstand = InternalMustUnderstand;
                    base.InternalActor = InternalActor;
                }
                element = value; 
            }
        } 
 
        internal override bool InternalMustUnderstand {
            get { 
                if (element == null) return base.InternalMustUnderstand;

                string elementMustUnderstand = GetElementAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace, element);
                if (elementMustUnderstand == null) { 
                    elementMustUnderstand = GetElementAttribute(Soap.Attribute.MustUnderstand, Soap12.Namespace, element);
                    if (elementMustUnderstand == null) 
                        return false; 
                }
 
                switch (elementMustUnderstand) {
                    case "false":
                    case "0":
                        return false; 
                    case "true":
                    case "1": 
                        return true; 
                    default:
                        return false; 
                }
            }
            set {
                base.InternalMustUnderstand = value; 
                if (element != null) {
                    if (value) 
                        element.SetAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace, "1"); 
                    else
                        element.RemoveAttribute(Soap.Attribute.MustUnderstand, Soap.Namespace); 

                    element.RemoveAttribute(Soap.Attribute.MustUnderstand, Soap12.Namespace);
                }
            } 
        }
 
        internal override string InternalActor { 
            get {
                if (element == null) return base.InternalActor; 

                string elementActor = GetElementAttribute(Soap.Attribute.Actor, Soap.Namespace, element);
                if (elementActor == null) {
                    elementActor = GetElementAttribute(Soap12.Attribute.Role, Soap12.Namespace, element); 
                    if (elementActor == null)
                        return ""; 
                } 
                return elementActor;
            } 
            set {
                base.InternalActor = value;
                if (element != null) {
                    if (value == null || value.Length == 0) 
                        element.RemoveAttribute(Soap.Attribute.Actor, Soap.Namespace);
                    else 
                        element.SetAttribute(Soap.Attribute.Actor, Soap.Namespace, value); 

                    element.RemoveAttribute(Soap12.Attribute.Role, Soap12.Namespace); 
                }
            }
        }
 
        internal override bool InternalRelay {
            get { 
                if (element == null) return base.InternalRelay; 

                string elementRelay = GetElementAttribute(Soap12.Attribute.Relay, Soap12.Namespace, element); 
                if (elementRelay == null)
                    return false;

                switch (elementRelay) { 
                    case "false":
                    case "0": 
                        return false; 
                    case "true":
                    case "1": 
                        return true;
                    default:
                        return false;
                } 
            }
            set { 
                base.InternalRelay = value; 
                if (element != null) {
                    if (value) 
                        element.SetAttribute(Soap12.Attribute.Relay, Soap12.Namespace, "1");
                    else
                        element.RemoveAttribute(Soap12.Attribute.Relay, Soap12.Namespace);
                } 
            }
        } 
 
        private string GetElementAttribute(string name, string ns, XmlElement element) {
            if (element == null) 
                return null;
            if (element.Prefix.Length == 0 && element.NamespaceURI == ns) {
                if (element.HasAttribute(name))
                    return element.GetAttribute(name); 
                else
                    return null; 
            } 
            else {
                if (element.HasAttribute(name, ns)) 
                    return element.GetAttribute(name, ns);
                else
                    return null;
            } 
        }
    } 
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

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