XML aus der gespeicherten Prozedur abrufen

8

Ich erhalte eine Ausgabe von XML aus einer gespeicherten Prozedur. Was ich versuche, ist, dass ich dieses XML über ASP.NET erhalte:

%Vor%

aber ich bekomme immer diese Fehler:

%Vor%

Was mache ich falsch? Ist etwas nicht in Ordnung mit der Art, wie ich versuche, die XML zu bekommen oder wäre ein Problem mit der XML selbst?

Ich habe Folgendes versucht:

%Vor%

und habe diese Fehler:

%Vor%     
user979331 13.04.2016, 15:50
quelle

4 Antworten

6

Das Problem ist wahrscheinlich, dass Sie das Ergebnis von XmlDocument verwenden, da ich auch kein Problem mit dem Code finden kann. Warum ich das glaube?

  1. Keine Ihrer Stack-Traces zeigt Aufrufe Ihres gebuchten Codes an. Sie verweisen tatsächlich auf eine Ausnahme, die bei HttpControllerHandler gestartet wurde und wahrscheinlich damit zu tun hat, wo oder wie Sie Ihre Antwort ausliefern.
  2. Basierend auf der Dokumentation der Aufruf SqlCommand.ExecuteXmlReader kann die InvalidOperationException werfen, aber es liest, dass dies nur auftreten würde, wenn The SqlConnection closed or dropped during a streaming operation. For more information about streaming, see SqlClient Streaming Support.
  3. Basierend auf der Dokumentation der Aufruf XmlDocument.Load nur gibt die Ausnahme XmlException aus, so dass dies aufgrund der empfangenen Ausnahme nicht möglich ist.
  4. Nach dem Googlen der Exception Message hatten vorherige Benutzer diesen Fehler aufgrund von Web-API-Konfigurationsproblemen, also wieder nichts mit dem Laden in Xml aus der Datenbank zu tun.

Spekulation über die Lösung

Das ist eine Spekulation, da ich nicht weiß, welches Framework Sie verwenden oder ob dies die WebApi-Methode oder eine Methode ist, die das Ergebnis weiter unten in der Aufrufliste bereitstellt.

Die Lösung für Sie besteht also darin, Ihre Daten in ein Format zu bringen, das von dem von Ihnen verwendeten Framework serialisiert werden kann. Für weitere Hilfe müssen Sie bereitstellen.

  1. Welchen Rahmen verwenden Sie (Web-API, MVC-Controller, asp.net, etwas anderes)
  2. If web Api - Der Methodenendpunkt wird aufgerufen, der die Daten bereitstellt. Wenn dies die Methode ist, besteht der Fehler darin, dass Sie versuchen, ein XmlDocument direkt zurückzugeben.
    • Stellen Sie sicher, dass die richtigen Formatierer in Ihrer WebApiConfig.cs -Datei konfiguriert sind. %Code%
    • Lesen Sie diese vorherige SO-Antwort , um zu erfahren, wie Sie Ihre Methode ändern können.
    • Ich würde empfehlen, dieses zu behalten und es als privat zu markieren und dann die Api-Methode hinzuzufügen, die diese Methode aufruft und die Ergebnisse in etwas formatiert, das an den Client zurückgegeben werden kann.

Web Api Fix

Ich kann den genauen Fehler und die Nachricht duplizieren, indem ich eine GlobalConfiguration.Configuration.Formatters.Add(new System.Net.Http.Formatting.XmlMediaTypeFormatter()); GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true; als Antwort in einem Web-API-Controller zurückgebe. Dies zeigt wiederum, dass es nichts mit dem Inhalt der Methode zu tun hat, sondern mehr, wo das XmlDocument in der Antwort verwendet wird. Wenn Sie ein XmlDocument direkt in die Antwort zurückgeben (also nicht Teil eines größeren Objekts), kann ich es beheben, indem ich einen neuen XmlDocument -Typ hinzufüge, der weiß, wie man den Inhalt von XmlDocument entschlüsselt.% Co_de% . Dies basiert auf dieser vorherigen SO-Antwort gepostet von HttpContent . Hier ist das Problem in einem vollständigen selbständigen Beispiel.

%Vor%

Allgemeine Code-Korrekturen

Ihre Methode hat einige Probleme in Bezug auf XmlDocument . Unten ist der aufgeräumte Code mit Erklärungen.

%Vor%     
Igor 23.04.2016, 10:11
quelle
0

Ändern Sie Ihren unteren Code,

%Vor%

Wie unten,

%Vor%

Wenn immer noch nicht funktioniert, bitte teilen Sie Ihre XML, die Sie von SP zurückgeben.

    
INDIA IT TECH 23.04.2016 09:08
quelle
0

XmlDocument ist nicht serialisierbar, gibt stattdessen eine Zeichenfolgendarstellung des XML zurück

%Vor%     
Peter Morris 23.04.2016 09:13
quelle
0

Sie können Ihre eigene einfache MediaTypeFormatter in ASP.NET Web API erstellen, um eine XmlDocument direkt auf eine Antwort zu streamen. Eine Beispielimplementierung befindet sich am Ende dieser Antwort.

Registrieren Sie es in der Methode public static void Register(HttpConfiguration config) der automatisch generierten Klasse WebApiConfig , die Sie beim Erstellen eines neuen Projekts mit dem VS-Assistenten erhalten.

%Vor%

Machen Sie in einer Controller-Klassenmethode etwas Ähnliches

%Vor%

Beispiel für einen benutzerdefinierten MediaTypeFormatter zum Streamen von XmlDocument auf eine Antwort.

%Vor%     
Roj 21.03.2017 18:51
quelle

Tags und Links