//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ namespace System.ServiceModel { using System.Reflection; using System.ServiceModel.Security; using System.Net.Security; using System.ServiceModel.Description; [AttributeUsage(ServiceModelAttributeTargets.OperationContract, AllowMultiple = true, Inherited = false)] public sealed class FaultContractAttribute : Attribute { string action; string name; string ns; Type type; ProtectionLevel protectionLevel = ProtectionLevel.None; bool hasProtectionLevel = false; public FaultContractAttribute(Type detailType) { if (detailType == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("detailType")); this.type = detailType; } public Type DetailType { get { return this.type; } } public string Action { get { return this.action; } set { if (value == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value"); this.action = value; } } public string Name { get { return this.name; } set { if (value == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value"); if (value == string.Empty) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", SR.GetString(SR.SFxNameCannotBeEmpty))); this.name = value; } } public string Namespace { get { return this.ns; } set { if (!string.IsNullOrEmpty(value)) NamingHelper.CheckUriProperty(value, "Namespace"); this.ns = value; } } internal const string ProtectionLevelPropertyName = "ProtectionLevel"; 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 HasProtectionLevel { get { return this.hasProtectionLevel; } } } }