Frage

Ich habe einige dynamisch generierten XML-Daten, die (eine ASPX-Seite, eine Flash-Datei und vielleicht eine andere auch) von einigen Verbrauchern verzehrt werden.

Ich habe es als benutzerdefinierten Handler implementiert. Ich konstruieren, um die XML in dem Handler und gibt es response.write verwendet wird.

Wenn ich nun die Datafile-Eigenschaft meiner XmlDataSource an den Handler gesetzt, versucht es, die Ashx Datei wörtlich zu lesen und stellt nicht es über HTTP.

Jede Beratung?

War es hilfreich?

Lösung

Zeigen Sie mit XML-Generierung Code in einer separaten Klasse. Haben die Handler die Klasse verwenden, um die XML zu erstellen und die Ergebnisse an den Client senden (BTW, verwenden Sie nicht Response.Write welche XML-Dokument Tech verwenden Sie die XML in erster Linie zu bauen?).

Stellen Sie sicher, dass die Klasse den fertigen XML als String belichten kann.

In Ihrer ASPX-Seite die gleiche Klasse verwenden und die XML-Zeichenfolge an die Daten Eigenschaft Ihrer XmlDataSource Steuerung zuweisen.

Bearbeiten :

Da Sie eine XmlTextWriter verwenden und aus dem Kommentar der oben ist anscheinend ein bisschen verwirrend ich diese Details hinzugefügt werden.

Sie müssen den Code zu übernehmen, die derzeit die XML erzeugt und legen Sie sie in einer Klasse im Ordner App_Code (oder möglicherweise in einem DLL-Projekt). Diese Klasse wird eine Methode, die eine XmlTextWriter als Parameter annimmt.

public class XmlCreator
{
    public void GenerateXml(XmlTextWriter writer)
    {
         //All your code that writes the XML
    }
}

In der Handler Sie dann diesen Code haben: -

XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);

Beachten Sie keine Notwendigkeit für Response.Write und dies wird die Kodierung richtig gemacht.

In der ASP.NET-Seite, die Sie verwenden: -

StringWriter source = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(source, Encoding.Unicode);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);

yourXmlDataSource.Data = source.ToString();

XmlCreator nicht brauchen kann in instanziert werden, die Fall, dass Sie eine statische Klasse verwenden könnte es hängt davon ab, welche anderen Daten benötigen die XM Generation zu ernähren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top