In letzter Zeit wir haben Ausnahmen wie dies in unserer .NET (ASMX) einen Web Service zu sehen:Wie kann ich fehlerhafte Soap-Anfragen debuggen?
System.Web.Services.Protocols.SoapException: Server was unable to read request. ---> System.InvalidOperationException: There is an error in XML document (868, -3932). ---> System.Xml.XmlException: '.', hexadecimal value 0x00, is an invalid character. Line 868, position -3932.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String[] args)
at System.Xml.XmlTextReaderImpl.ThrowInvalidChar(Int32 pos, Char invChar)
at System.Xml.XmlTextReaderImpl.ParseNumericCharRefInline(Int32 startPos, Boolean expand, BufferBuilder internalSubsetBuilder, Int32& charCount, EntityType& entityType)
at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars)
at System.Xml.XmlTextReaderImpl.ParseText()
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlTextReader.Read()
at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()
at System.Xml.XmlReader.ReadElementString()
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read14_SendErrlog()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer12.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
at System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
--- End of inner exception stack trace ---
at System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
Wie kann ich diese Ausnahme debuggen? Diese Ausnahme wird uns von einem SOAP-Filter gemeldet, der nach Ausnahmen in message.Stage = SoapMessageStage.AfterSerialize sucht.
Gibt es eine Möglichkeit, die ursprüngliche Soap-Anfrage zu bekommen? Wie bekomme ich ein ungültiges Zeichen in Zeile 868, Spalte -3932? Wie kann eine negative Spalte 3932?
Unsere App ist der Client und es ist nur einige XML-Literal Escape-Text (& (<, > und dergleichen). Es sollte niemals Nullen geben. Diese Ausnahme tritt sogar bei einer Soap-Anfrage ohne Parameter auf. Der Client benutzt eine "Web Reference", um auf den Server zuzugreifen, also machen wir nicht einmal Crafting die SOAP von Hand. Ich denke, du hast Recht, dass ich nur alle SOAP-Anfragen erfassen muss. Unser NOC wird mich lieben, wenn ich den Log-Ordner befülle ;-) –