File: System\ServiceModel\Description\FaultDescription.cs
Project: ndp\cdf\src\WCF\ServiceModel\System.ServiceModel.csproj (System.ServiceModel)
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Description
{
    using System.Collections.Generic;
    using System.Xml;
    using System.Runtime.Serialization;
    using System.CodeDom;
    using System.ServiceModel.Security;
    using System.Diagnostics;
    using System.Net.Security;
 
    [DebuggerDisplay("Name={name}, Action={action}, DetailType={detailType}")]
    public class FaultDescription
    {
        string action;
        Type detailType;
        CodeTypeReference detailTypeReference;
        XmlName elementName;
        XmlName name;
        string ns;
        ProtectionLevel protectionLevel;
        bool hasProtectionLevel;
 
        public FaultDescription(string action)
        {
            if (action == null)
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("action"));
 
            this.action = action;
        }
        
        public string Action
        {
            get { return action; }
            internal set { action = value; }
        }
 
        // Not serializable on purpose, metadata import/export cannot
        // produce it, only available when binding to runtime
        public Type DetailType
        {
            get { return detailType; }
            set { detailType = value; }
        }
 
        internal CodeTypeReference DetailTypeReference
        {
            get { return detailTypeReference; }
            set { detailTypeReference = value; }
        }
 
        public string Name
        {
            get { return name.EncodedName; }
            set { SetNameAndElement(new XmlName(value, true /*isEncoded*/)); }
        }
 
        public string Namespace
        {
            get { return ns; }
            set { ns = value; }
        }
 
        internal XmlName ElementName
        {
            get { return elementName; }
            set { elementName = value; }
        }
 
        public ProtectionLevel ProtectionLevel
        {
            get { return this.protectionLevel; }
            set
            {
                if (!ProtectionLevelHelper.IsDefined(value))
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
                this.protectionLevel = value;
                this.hasProtectionLevel = true;
            }
        }
 
        public bool ShouldSerializeProtectionLevel()
        {
            return this.HasProtectionLevel;
        }
 
        public bool HasProtectionLevel
        {
            get { return this.hasProtectionLevel; }
        }
 
        internal void ResetProtectionLevel()
        {
            this.protectionLevel = ProtectionLevel.None;
            this.hasProtectionLevel = false;
        }
 
        internal void SetNameAndElement(XmlName name)
        {
            this.elementName = this.name = name;
        }
 
        internal void SetNameOnly(XmlName name)
        {
            this.name = name;
        }
    }
}