2009-05-22 12 views
1

いくつかのコンシューマ(ASPXページ、フラッシュファイル、おそらく別のもの)で消費される、動的に生成されるXMLデータがあります。XMLDataSourceをHTTPハンドラにバインドする

私はそれをカスタムハンドラとして実装しました。ハンドラにXMLを構築し、response.writeを使用して出力します。

Now XMLDataSourceのDataFileプロパティをハンドラに設定すると、ashxファイルをそのまま読み込もうとしますが、HTTP経由では呼び出されません。

任意のアドバイスはありますか?

答えて

3

XML生成コードを別のクラスに配置します。ハンドラがクラスを使用してXMLを作成し、その結果をクライアントに送信する(BTWでは、最初にXMLを作成するためにXML文書技術を使用しているResponse.Writeは使用しないでください)。

クラスが完成したXMLを文字列として公開できることを確認してください。

ASPXページで、同じクラスを使用し、XML文字列をXmlDataSourceコントロールのdataプロパティに割り当てます。

編集

おてXmlTextWriterを使用しているので、上あなたのコメントからは、私はこれらの詳細を追加します明らかに少し混乱しています。

現在XMLを生成しているコードをApp_Codeフォルダ(またはおそらくdllプロジェクト)のクラスに配置する必要があります。このクラスには、XmlTextWriterをパラメータとして受け取るメソッドがあります。

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

ノートのResponse.Writeのための必要性を、これが適切に行わエンコーディングを取得します - :あなたは、このコードを持っていないあなたのハンドラで

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

使用するあなたの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生成を供給する必要がありますされ、他のどのようなデータに依存静的クラスを使用することができ、その場合にはインスタンス化する必要はないかもしれません。

+0

XML生成にXMLTextWriterを使用しています。 このデータの消費者はASP.Net以外になるため、クラスを作成できません。それはWebからアクセス可能な何かでなければならないので、HttpHandler – Midhat

+0

あなたはクラスを作ることができます。サーバー側のコードは、クラスを介して直接XMLにアクセスします。 OTHでは、クライアント側のコードがHttpHandlerを介してXMLにアクセスし、HttpHandlerは同じクラスを使用して実際にXMLを作成します。 XMLを生成するコードは1つの場所(クラス)にあり、HttpHandlerはクライアント側のアクセスを可能にするアダプタになります。 – AnthonyWJones

+0

XMLDataSourceへの入力としてXMLを使用することを意図しました。しかし、今私はDataFileプロパティの代わりにDataプロパティを使用すると思います – Midhat