Ich habe mehrere Webapi-Micro-Services in TopShelf-Containern gehostet, die JSON- und XML-Formatierer akzeptieren und darauf antworten. Nach einer gewissen Laufzeit stoppt der XML-Formatierer die Bindung der XML-Anforderungsdaten an das Modell. Die Übergabe von JSON oder Form-Data funktioniert weiterhin . Angeben eines Accept: application/xml
-Headers, der zu einer XML-Antwort führt. Das erneute Abspielen der fehlgeschlagenen XML-Anforderungen nach dem Neustart des Dienstes gibt die erwarteten Antworten zurück .
Die Ursache des Problems liegt darin, dass die Eigenschaft SupportedMediaTypes
des XmlFormatter zu einem bestimmten Zeitpunkt gelöscht wird, während der Dienst ausgeführt wird und die Modellbindung fehlschlägt.
Wie finde ich heraus, was die SupportedMediaTypes
löscht?
Notizen während der Untersuchung des Problems folgen.
Ich kann das Problem in keiner Umgebung replizieren, mit der ich einen Debugger verbinden kann.
Einer der Dienste hat bei der lokalen Fehlersuche fehlgeschlagen. Von dem, was ich sehen kann, wählt es den DataContractSerializer statt den XmlSerializer für die Deserialisierung.
Die Startup-Klasse fügt die Formatierer in dieser Reihenfolge hinzu:
%Vor%Das Überprüfen der Formatierreihenfolge in HttpConfiguration zeigt, dass der XmlSerializer-Formatierer Priorität hat:
%Vor% Der% formator UseXmlSerializer == true
gibt an, dass er den Typ lesen kann, aber der% formator format co_de% wird von der Sammlung selbst mit UseXmlSerializer == false
:
Warum gibt die Methode System.Object
den Formatierer mit niedrigerer Priorität zurück?
Überprüfen Sie die Quelle für MediaTypeFormatterCollection.FindReader
auf GitHub (danke Microsoft!), dachte ich, um die MediaTypeFormatterCollection
für beide Instanzen zu sehen:
Bei einem Neustart des Projekts ist die Sammlung für Formatierer [1] die gleiche wie für Formatierer [2].
Die einzigen Verweise auf die Eigenschaft SupportedMediaTypes
im Projekt sind, wo MediaTypeFormatter.SupportedMediaTypes
im Konstruktor ein eigenes RecordSetMediaTypeFormatter
setzt.
Was löscht die Eigenschaft SupportedMediaTypes
des XmlFormatter zur Laufzeit?
Tags und Links asp.net-web-api asp.net xml asp.net-web-api2