protected override XmlObjectSerializer GetSerializer(Type detailType, string faultExceptionAction, out string action) { action = faultExceptionAction; XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo faultInfo = null; for (int i = 0; i < _xmlSerializerFaultContractInfos.Count; i++) { if (_xmlSerializerFaultContractInfos[i].FaultContractInfo.Detail == detailType) { faultInfo = _xmlSerializerFaultContractInfos[i]; break; } } if (faultInfo != null) { if (action == null) { action = faultInfo.FaultContractInfo.Action; } return(faultInfo.Serializer); } else { return(new XmlSerializerObjectSerializer(detailType)); } }
protected override FaultException CreateFaultException(MessageFault messageFault, string action) { IList <XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo> faultInfos; if (action != null) { faultInfos = new List <XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo>(); for (int i = 0; i < _xmlSerializerFaultContractInfos.Count; i++) { if (_xmlSerializerFaultContractInfos[i].FaultContractInfo.Action == action || _xmlSerializerFaultContractInfos[i].FaultContractInfo.Action == MessageHeaders.WildcardAction) { faultInfos.Add(_xmlSerializerFaultContractInfos[i]); } } } else { faultInfos = _xmlSerializerFaultContractInfos; } Type detailType = null; object detailObj = null; for (int i = 0; i < faultInfos.Count; i++) { XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo faultInfo = faultInfos[i]; XmlDictionaryReader detailReader = messageFault.GetReaderAtDetailContents(); XmlObjectSerializer serializer = faultInfo.Serializer; if (serializer.IsStartObject(detailReader)) { detailType = faultInfo.FaultContractInfo.Detail; try { detailObj = serializer.ReadObject(detailReader); FaultException faultException = CreateFaultException(messageFault, action, detailObj, detailType, detailReader); if (faultException != null) { return(faultException); } } catch (SerializationException) { } } } return(new FaultException(messageFault, action)); }
protected override FaultException CreateFaultException(MessageFault messageFault, string action) { IList <XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo> faultInfos; if (action != null) { faultInfos = new List <XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo>(); for (int i = 0; i < _xmlSerializerFaultContractInfos.Count; i++) { if (_xmlSerializerFaultContractInfos[i].FaultContractInfo.Action == action || _xmlSerializerFaultContractInfos[i].FaultContractInfo.Action == MessageHeaders.WildcardAction) { faultInfos.Add(_xmlSerializerFaultContractInfos[i]); } } } else { faultInfos = _xmlSerializerFaultContractInfos; } for (int i = 0; i < faultInfos.Count; i++) { XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo faultInfo = faultInfos[i]; XmlDictionaryReader detailReader = messageFault.GetReaderAtDetailContents(); XmlObjectSerializer serializer = faultInfo.Serializer; if (serializer.IsStartObject(detailReader)) { Type detailType = faultInfo.FaultContractInfo.Detail; try { object detailObj = serializer.ReadObject(detailReader); FaultException faultException = CreateFaultException(messageFault, action, detailObj, detailType, detailReader); if (faultException != null) { return(faultException); } } #pragma warning disable CA1031 // Do not catch general exception types - if we can't deserialie the message fault detail, return plain FaultException catch (SerializationException) { } #pragma warning restore CA1031 // Do not catch general exception types } } return(new FaultException(messageFault, action)); }
protected override FaultException CreateFaultException(MessageFault messageFault, string action) { IList <XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo> xmlSerializerFaultContractInfos; if (action != null) { xmlSerializerFaultContractInfos = new List <XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo>(); for (int j = 0; j < this.xmlSerializerFaultContractInfos.Count; j++) { if ((this.xmlSerializerFaultContractInfos[j].FaultContractInfo.Action == action) || (this.xmlSerializerFaultContractInfos[j].FaultContractInfo.Action == "*")) { xmlSerializerFaultContractInfos.Add(this.xmlSerializerFaultContractInfos[j]); } } } else { xmlSerializerFaultContractInfos = this.xmlSerializerFaultContractInfos; } System.Type detailType = null; object detailObj = null; for (int i = 0; i < xmlSerializerFaultContractInfos.Count; i++) { XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo info = xmlSerializerFaultContractInfos[i]; XmlDictionaryReader readerAtDetailContents = messageFault.GetReaderAtDetailContents(); XmlObjectSerializer serializer = info.Serializer; if (serializer.IsStartObject(readerAtDetailContents)) { detailType = info.FaultContractInfo.Detail; try { detailObj = serializer.ReadObject(readerAtDetailContents); FaultException exception = base.CreateFaultException(messageFault, action, detailObj, detailType, readerAtDetailContents); if (exception != null) { return(exception); } } catch (SerializationException) { } } } return(new FaultException(messageFault, action)); }