2009-05-22 85 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