protected virtual XmlObjectSerializer GetSerializer(Type detailType, string faultExceptionAction, out string action) { action = faultExceptionAction; FaultContractInfo faultInfo = null; for (int i = 0; i < _faultContractInfos.Length; i++) { if (_faultContractInfos[i].Detail == detailType) { faultInfo = _faultContractInfos[i]; break; } } if (faultInfo != null) { if (action == null) { action = faultInfo.Action; } return(faultInfo.Serializer); } else { return(DataContractSerializerDefaults.CreateSerializer(detailType, int.MaxValue /* maxItemsInObjectGraph */)); } }
internal XmlSerializerFaultContractInfo(System.ServiceModel.Dispatcher.FaultContractInfo faultContractInfo, XmlSerializerOperationBehavior.Reflector.SerializerStub serializerStub, XmlQualifiedName faultContractElementName) { if (faultContractInfo == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("faultContractInfo"); } if (faultContractElementName == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("faultContractElementName"); } this.faultContractInfo = faultContractInfo; this.serializerStub = serializerStub; this.faultContractElementName = faultContractElementName; }
protected virtual FaultException CreateFaultException(MessageFault messageFault, string action) { IList <FaultContractInfo> faultInfos; if (action != null) { faultInfos = new List <FaultContractInfo>(); for (int i = 0; i < _faultContractInfos.Length; i++) { if (_faultContractInfos[i].Action == action || _faultContractInfos[i].Action == MessageHeaders.WildcardAction) { faultInfos.Add(_faultContractInfos[i]); } } } else { faultInfos = _faultContractInfos; } Type detailType = null; object detailObj = null; for (int i = 0; i < faultInfos.Count; i++) { FaultContractInfo faultInfo = faultInfos[i]; XmlDictionaryReader detailReader = messageFault.GetReaderAtDetailContents(); XmlObjectSerializer serializer = faultInfo.Serializer; if (serializer.IsStartObject(detailReader)) { detailType = faultInfo.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 virtual FaultException CreateFaultException(MessageFault messageFault, string action) { IList <FaultContractInfo> faultContractInfos; if (action != null) { faultContractInfos = new List <FaultContractInfo>(); for (int j = 0; j < this.faultContractInfos.Length; j++) { if ((this.faultContractInfos[j].Action == action) || (this.faultContractInfos[j].Action == "*")) { faultContractInfos.Add(this.faultContractInfos[j]); } } } else { faultContractInfos = this.faultContractInfos; } System.Type detailType = null; object detailObj = null; for (int i = 0; i < faultContractInfos.Count; i++) { FaultContractInfo info = faultContractInfos[i]; XmlDictionaryReader readerAtDetailContents = messageFault.GetReaderAtDetailContents(); XmlObjectSerializer serializer = info.Serializer; if (serializer.IsStartObject(readerAtDetailContents)) { detailType = info.Detail; try { detailObj = serializer.ReadObject(readerAtDetailContents); FaultException exception = this.CreateFaultException(messageFault, action, detailObj, detailType, readerAtDetailContents); if (exception != null) { return(exception); } } catch (SerializationException) { } } } return(new FaultException(messageFault, action)); }
protected virtual XmlObjectSerializer GetSerializer(System.Type detailType, string faultExceptionAction, out string action) { action = faultExceptionAction; FaultContractInfo info = null; for (int i = 0; i < this.faultContractInfos.Length; i++) { if (this.faultContractInfos[i].Detail == detailType) { info = this.faultContractInfos[i]; break; } } if (info == null) { return(DataContractSerializerDefaults.CreateSerializer(detailType, 0x7fffffff)); } if (action == null) { action = info.Action; } return(info.Serializer); }
internal XmlSerializerFaultContractInfo(FaultContractInfo faultContractInfo, SerializerStub serializerStub, XmlQualifiedName faultContractElementName) { if (faultContractInfo == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("faultContractInfo"); } if (faultContractElementName == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("faultContractElementName"); } _faultContractInfo = faultContractInfo; _serializerStub = serializerStub; _faultContractElementName = faultContractElementName; }
private void GenerateXmlSerializerFaultContractInfos() { SynchronizedCollection<XmlSerializerFaultContractInfo> faultInfos = new SynchronizedCollection<XmlSerializerFaultContractInfo>(); for (int i = 0; i < this.Operation.Faults.Count; i++) { FaultDescription fault = this.Operation.Faults[i]; FaultContractInfo faultContractInfo = new FaultContractInfo(fault.Action, fault.DetailType, fault.ElementName, fault.Namespace, this.Operation.KnownTypes); XmlQualifiedName elementName; XmlMembersMapping xmlMembersMapping = this.ImportFaultElement(fault, out elementName); SerializerStub serializerStub = _parent._generation.AddSerializer(xmlMembersMapping); faultInfos.Add(new XmlSerializerFaultContractInfo(faultContractInfo, serializerStub, elementName)); } _xmlSerializerFaultContractInfos = faultInfos; }
private void GenerateXmlSerializerFaultContractInfos() { SynchronizedCollection<XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo> synchronizeds = new SynchronizedCollection<XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo>(); for (int i = 0; i < this.Operation.Faults.Count; i++) { XmlQualifiedName name; FaultDescription fault = this.Operation.Faults[i]; FaultContractInfo faultContractInfo = new FaultContractInfo(fault.Action, fault.DetailType, fault.ElementName, fault.Namespace, this.Operation.KnownTypes); XmlMembersMapping mapping = this.ImportFaultElement(fault, out name); XmlSerializerOperationBehavior.Reflector.SerializerStub serializerStub = this.parent.generation.AddSerializer(mapping); synchronizeds.Add(new XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo(faultContractInfo, serializerStub, name)); } this.xmlSerializerFaultContractInfos = synchronizeds; }