Pergunta

Eu tenho alguns dados XML gerados dinamicamente que serão consumidos por alguns consumidores (uma página ASPX, um arquivo Flash e talvez outro também).

Eu tenho implementado lo como um manipulador personalizado. Eu construir o XML no manipulador e saída lo usando response.write.

Agora, se eu definir a propriedade DataFile da minha XmlDataSource para o manipulador, ele tenta ler o arquivo ashx literalmente e não chamá-lo através de HTTP.

Qualquer conselho?

Foi útil?

Solução

Coloque o código de geração de XML em uma classe separada. Tem o manipulador usar a classe para criar o XML e enviar os resultados para o cliente (BTW, não use Response.Write o documento XML tecnologia que você está usando para construir o XML em primeiro lugar?).

Certifique-se a classe pode expor o XML concluída como uma string.

Na sua página uso ASPX da mesma classe e atribuir a seqüência de caracteres XML para a propriedade data do seu controle XmlDataSource.

Editar :

Uma vez que você estiver usando um XmlTextWriter e do seu comentário acima é aparentemente um pouco confuso vou acrescentar esses detalhes.

Você precisa ter o código que atualmente gera o XML e colocá-lo em uma classe na pasta App_Code (ou possivelmente em um projeto dll). Esta classe terá um método que usa como parâmetro um XmlTextWriter.

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

Em seu manipulador então você tem este código: -

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

Nota sem necessidade de Response.Write e isso fica a codificação feito corretamente.

Na sua página ASP.NET que você usar: -

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

yourXmlDataSource.Data = source.ToString();

XmlCreator pode não precisam ser instanciado, caso em que você poderia usar uma classe estática que depende do que outros dados é necessário para alimentar a geração XM.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top