static CodeAttributeDeclaration CreateAttrDecl(OperationContractGenerationContext context, FaultDescription fault) { CodeTypeReference exceptionTypeReference = fault.DetailType != null?context.Contract.ServiceContractGenerator.GetCodeTypeReference(fault.DetailType) : fault.DetailTypeReference; if (exceptionTypeReference == null || exceptionTypeReference == voidTypeReference) { return(null); } CodeAttributeDeclaration faultContractAttr = new CodeAttributeDeclaration(context.ServiceContractGenerator.GetCodeTypeReference(typeof(FaultContractAttribute))); faultContractAttr.Arguments.Add(new CodeAttributeArgument(new CodeTypeOfExpression(exceptionTypeReference))); if (fault.Action != null) { faultContractAttr.Arguments.Add(new CodeAttributeArgument("Action", new CodePrimitiveExpression(fault.Action))); } if (fault.HasProtectionLevel) { faultContractAttr.Arguments.Add(new CodeAttributeArgument("ProtectionLevel", new CodeFieldReferenceExpression( new CodeTypeReferenceExpression(typeof(ProtectionLevel)), fault.ProtectionLevel.ToString()))); } // override name with encoded value specified in wsdl; this only works beacuse // our Encoding algorithm will leave alredy encoded names untouched if (!XmlName.IsNullOrEmpty(fault.ElementName)) { faultContractAttr.Arguments.Add(new CodeAttributeArgument("Name", new CodePrimitiveExpression(fault.ElementName.EncodedName))); } if (fault.Namespace != context.Contract.Contract.Namespace) { faultContractAttr.Arguments.Add(new CodeAttributeArgument("Namespace", new CodePrimitiveExpression(fault.Namespace))); } return(faultContractAttr); }
private static CodeAttributeDeclaration CreateAttrDecl(OperationContractGenerationContext context, FaultDescription fault) { CodeTypeReference type = (fault.DetailType != null) ? context.Contract.ServiceContractGenerator.GetCodeTypeReference(fault.DetailType) : fault.DetailTypeReference; if ((type == null) || (type == voidTypeReference)) { return(null); } CodeAttributeDeclaration declaration = new CodeAttributeDeclaration(context.ServiceContractGenerator.GetCodeTypeReference(typeof(FaultContractAttribute))); declaration.Arguments.Add(new CodeAttributeArgument(new CodeTypeOfExpression(type))); if (fault.Action != null) { declaration.Arguments.Add(new CodeAttributeArgument("Action", new CodePrimitiveExpression(fault.Action))); } if (fault.HasProtectionLevel) { declaration.Arguments.Add(new CodeAttributeArgument("ProtectionLevel", new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(ProtectionLevel)), fault.ProtectionLevel.ToString()))); } if (!XmlName.IsNullOrEmpty(fault.ElementName)) { declaration.Arguments.Add(new CodeAttributeArgument("Name", new CodePrimitiveExpression(fault.ElementName.EncodedName))); } if (fault.Namespace != context.Contract.Contract.Namespace) { declaration.Arguments.Add(new CodeAttributeArgument("Namespace", new CodePrimitiveExpression(fault.Namespace))); } return(declaration); }