NWC Services Blog
Fehlermeldung "Die Antwort ist kein wohlgeformter XML-Code" bei PSX
In jüngerer Vergangenheit sind wir von einigen Anwendern unserer PowerShell Extensions für FrontRange DSM (PSX) darauf aufmerksam gemacht worden, dass es beim Absetzen von PSX-Kommandos die fehlschlagen, zu einer kryptischen Fehlermeldung kommt, die nur besagt dass das es sich bei der Antwort um nicht-wohlgeformtes XML handeln würde.
Dies ist natürlich wenig aussagekräftig und hilft bei der Ergründung der Fehlerursache nicht weiter.
Im oben dargestellten Fall kann man vielleicht noch selbst darauf kommen, dass es schlicht nicht möglich ist, eine Software-Kategorie unterhalb von "Managed Users & Computers" zu erstellen – in aller Regel wird man jedoch auf die konkrete Fehlermeldung angewiesen sein, um die Ursache des Problems erkennen und beheben zu können.
Das beobachtete Verhalten tritt im Übrigen nur auf, wenn die Umgebung schon auf DSM 2013.2 (oder neuer) aktualisiert wurde.
Die Ursache liegt darin, dass seit DSM 2013.2 der Administration Webservice auf Anfragen komprimiert antworten kann – zumindest wenn der Client das unterstützt. Da die DSM Konsole dies tut (was natürlich gerade in verteilten Umgebungen sehr erwünscht ist), wurde diese Möglichkeit von uns in den PSX Version 2.1.1 ebenfalls implementiert und standardmäßig aktiviert.
Damit der Administration Webservice eine komprimierte Antwort auf eine Anfrage sendet, muss in der Anfrage im Header die Information "Accept-Encoding: gzip" mitgesendet werden. Im Normalfall steckt im Header der Server-Antwort dann die Information auf "Content-Encoding: gzip", sodass .NET-Webclient (der von den PSX verwendet wird) weiß, dass der Inhalt komprimiert ist und vor der Verarbeitung entpackt werden muss.
Im Fehlerfall antwortet der Server jedoch mit komprimiertem XML aber ohne die Referenz auf "Content-Encoding: gzip", was im Soap-Client des .NET-Framework zu einem Problem führt und dieser mit der Fehlermeldung "Die Antwort ist kein wohlgeformter XML-Code" reagiert.
Interessant ist übrigens anzumerken, dass die DSM Konsole dieses Verhalten nicht zeigt. Offensichtlich ist es so, dass die Konsole dann implizit von einer komprimierten Antwort ausgeht (obwohl dies vom Server ja nicht mitgeteilt wurde) und versucht, diese zu dekomprimieren – was dann auch gelingt.
Um nun auch mit den PowerShell Extensions an eine Fehlermeldung zu gelangen, die Hinweise zur Ursache liefert, muss man den Client (also die PSX-Sitzung) so konfigurieren, dass er aus Serversicht keine Dekompression beherrscht. Dann sendet der Server keine komprimierten Antworten und auch eine Fehlermeldung ist dann in dem Format, wie es der Header beschreibt.
Um dies zu erreichen, muss die Eigenschaft EnableDecompression des PSDrive-Objekts auf den Wert $false gesetzt werden. Dies kann mit den im folgenden Screenshot gezeigten Befehlen erreicht werden (unter der Annahme, dass der Name des PowerShell-Laufwerks "emdb" lautet):
Eine anschließende Anfrage, die in einer SOAP-Fehlermeldung resultiert, liefert dann wieder die ausführliche und aussagekräftige Fehlermeldung des Servers:
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
Kommentare