2009-05-22 80 views
1

我有一些動態生成的XML數據,這些數據將被少數使用者(ASPX頁面,Flash文件或其他應用程序)使用。將XMLDataSource綁定到HTTP處理程序

我已經實現它作爲自定義處理程序。我在處理程序中構造XML並使用response.write輸出它。

現在如果我將XMLDataSource的DataFile屬性設置爲處理程序,它會嘗試從字面上讀取ashx文件並且不會通過HTTP調用它。

有什麼建議嗎?

回答

3

將您的XML代碼放在一個單獨的類中。讓處理程序使用該類創建XML並將結果發送給客戶端(順便說一下,不要使用Response.Write XML文檔技術是用來構建XML的第一位?)。

確保該類可以將完整的XML作爲字符串公開。

在您的ASPX頁面中,使用相同的類並將XML字符串分配給XmlDataSource控件的data屬性。

編輯

由於您使用的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代。

+0

我正在使用XMLTextWriter進行XML生成。 我不能創建一個類,因爲這個數據將會比ASP.Net的其他消費者。它必須是可以從網絡訪問的東西,因此HttpHandler – Midhat 2009-05-22 07:56:49