HTTPハンドラにバインドXMLDataSource
-
23-08-2019 - |
質問
私は(だけでなくASPXページ、フラッシュファイルと、おそらく別の1)少数の消費者によって消費されるいくつかの動的に生成されたXMLデータを持っています。
私は、カスタムハンドラとしてそれを実装しています。私はResponse.Writeをを使用してハンドラでXMLを構築して出力します。
今、私はハンドラへの私のXMLDataSourceのデータファイルのプロパティを設定した場合、それは文字通りASHXファイルを読み込もうとすると、HTTPを通してそれを呼び出すことはありません。
任意のアドバイスはありますか?
解決
別のクラスであなたのXMLの生成コードを配置します。ハンドラが(ところで、あなたが最初の場所でXMLを構築するために使用しているXML文書のハイテクのResponse.Writeを使用していない?)XMLを作成し、クライアントに結果を送信するためにクラスを使用しています。
クラスは、文字列として完成XMLを公開することができていることを確認します。
あなたのASPXページで同じクラスを使用して、XmlDataSourceコントロールのdataプロパティにXML文字列を割り当てます。
編集
あなたがてXmlTextWriterを使用していて、あなたのコメントから上記が明らかであるので、私はこれらの詳細を追加します混乱ビットます。
あなたは現在、XMLを生成するコードを取ると、App_Codeフォルダー内(あるいはDLLプロジェクトに)クラスに配置する必要があります。このクラスは、パラメータとしててXmlTextWriterを受け取るメソッドを持つことになります。
public class XmlCreator
{
public void GenerateXml(XmlTextWriter writer)
{
//All your code that writes the XML
}
}
あなたのハンドラではあなたは、このコードを持っている: -
XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);
は、Response.Writeをのための必要性に注意しないと、これが適切に行わエンコーディングを取得します。
あなたのASP.NETページでは、使用: -
StringWriter source = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(source, Encoding.Unicode);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);
yourXmlDataSource.Data = source.ToString();
XmlCreatorあなたはそれがXM生成を供給する必要がある他のどのようなデータに依存静的クラスを使用することができ、その場合にはインスタンス化する必要はないかもしれません。