動的に生成されたXMLデータがいくつかあり、それらは少数のコンシューマーによって消費されます(ASPXページ、フラッシュファイル、および別のファイルもあります)。
カスタムハンドラーとして実装しました。ハンドラーでXMLを作成し、response.writeを使用して出力します。
ここで、XMLDataSourceのDataFileプロパティをハンドラーに設定すると、ashxファイルを文字通り読み取ろうとし、HTTPを介して呼び出されません。
何かアドバイス?
動的に生成されたXMLデータがいくつかあり、それらは少数のコンシューマーによって消費されます(ASPXページ、フラッシュファイル、および別のファイルもあります)。
カスタムハンドラーとして実装しました。ハンドラーでXMLを作成し、response.writeを使用して出力します。
ここで、XMLDataSourceのDataFileプロパティをハンドラーに設定すると、ashxファイルを文字通り読み取ろうとし、HTTPを介して呼び出されません。
何かアドバイス?
XML生成コードを別のクラスに配置します。ハンドラーにクラスを使用してXMLを作成し、結果をクライアントに送信させます(ところで、Responseを使用しないでください。最初にXMLを構築するために使用しているXMLドキュメント技術を記述してください)。
クラスが完成したXMLを文字列として公開できることを確認してください。
ASPXページで同じクラスを使用し、XML文字列をXmlDataSourceコントロールのデータプロパティに割り当てます。
編集:
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世代にフィードするために必要な他のデータによって異なります。