Pregunta

Tengo algunos datos XML generado dinámicamente que será consumido por unos consumidores (una página ASPX, un archivo flash y tal vez más en el también).

He implementado como un controlador personalizado. Construyo el XML en el controlador y salida utilizando response.write.

Ahora bien, si establece la propiedad DataFile de mi XmlDataSource al controlador, que intenta leer el archivo ashx literal y no lo llama a través de HTTP.

Cualquier consejo?

¿Fue útil?

Solución

Coloca el código de generación de XML en una clase separada. Haga que el manejador de utilizar la clase para crear el XML y enviar los resultados al cliente (Por cierto, no utilice Response.Write lo documento XML tecnología se está utilizando para construir el XML en el primer lugar?).

Asegúrese de que la clase puede exponer el XML completo como una cadena.

En su página ASPX utilizar la misma clase y asignar la cadena XML a la propiedad data de su control XmlDataSource.

Editar

Dado que está utilizando un XmlTextWriter y de su comentario anterior es al parecer un poco confuso Voy a añadir estos detalles.

Es necesario tomar el código que actualmente genera el XML y lo coloca en una clase en la carpeta App_Code (o, posiblemente, en un proyecto DLL). Esta clase tendrá un método que toma como parámetro un XmlTextWriter.

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

En el controlador de usted entonces tiene este código: -

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

Tenga en cuenta sin necesidad de Response.Write y ahora se pone la codificación se realiza correctamente.

En su página ASP.NET que utilice: -

StringWriter source = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(source, Encoding.Unicode);
XmlCreator creator = new XmlCreator();
XmlCreator.GenerateXml(writer);

yourXmlDataSource.Data = source.ToString();
puede no necesitar ser instanciado en cuyo caso se puede utilizar una clase estática que depende de qué otros datos se necesitan para alimentar a la generación XM

XmlCreator.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top