protected override void DoValidate(IEnumerable <Fault> objectToValidate, object currentTarget, string key, ValidationResults validationResults) { Operation operation = currentTarget as Operation; if (operation == null) { return; } string serviceContractImplementationTech = String.Empty; if (operation.ServiceContractModel.ImplementationTechnology == null) { return; } else { serviceContractImplementationTech = operation.ServiceContractModel.ImplementationTechnology.Name; } SerializerType serviceContractSerializer = operation.ServiceContractModel.SerializerType; foreach (Fault item in objectToValidate) { bool isValid = true; DataContractFault fault = item as DataContractFault; if (fault == null || fault.Type == null) { continue; } if (!fault.Type.IsValidReference()) { validationResults.AddResult( new ValidationResult( String.Format(CultureInfo.CurrentUICulture, Resources.CannotResolveReference, currentTarget.GetType().Name, fault.Name, fault.Type.GetDisplayName()), fault, key, String.Empty, this)); return; } ModelElement mel = ModelBusReferenceResolver.ResolveAndDispose(fault.Type); if (mel == null) { return; } FaultContract dcFault = mel as FaultContract; if (dcFault == null || dcFault.DataContractModel == null || dcFault.DataContractModel.ImplementationTechnology == null) { return; } if (serviceContractImplementationTech.Equals(ASMXExtension, StringComparison.OrdinalIgnoreCase)) { if (serviceContractSerializer.Equals(SerializerType.XmlSerializer)) { isValid = !(dcFault.DataContractModel.ImplementationTechnology.Name.Equals(WCFExtension, StringComparison.OrdinalIgnoreCase)); } else { // Asmx Extension only supports XmlSerializer validationResults.AddResult( new ValidationResult(String.Format(CultureInfo.CurrentUICulture, asmxExtensionInvalidSerializerMessage, fault.Name, operation.Name), objectToValidate, key, String.Empty, this) ); return; } } else if (serviceContractImplementationTech.Equals(WCFExtension, StringComparison.OrdinalIgnoreCase)) { if (serviceContractSerializer.Equals(SerializerType.DataContractSerializer)) { isValid = !(dcFault.DataContractModel.ImplementationTechnology.Name.Equals(ASMXExtension, StringComparison.OrdinalIgnoreCase)); } else { if (dcFault.DataContractModel.ImplementationTechnology.Name.Equals(ASMXExtension, StringComparison.OrdinalIgnoreCase)) { // Faults cannot be XMLSerializable validationResults.AddResult( new ValidationResult(String.Format(CultureInfo.CurrentUICulture, faultInvalidSerializerMessage, operation.Name, fault.Name), objectToValidate, key, String.Empty, this) ); return; } } } if (!isValid) { validationResults.AddResult( new ValidationResult(String.Format(CultureInfo.CurrentUICulture, this.MessageTemplate, fault.Name, operation.Name), objectToValidate, key, String.Empty, this) ); } } }