Pergunta

O código de acompanhamento (em execução no ASP.Net 2.0) exibe o conteúdo da URL solicitada duas vezes . Eu só quero que ele para exibir o conteúdo da URL solicitada uma vez. Eu não consigo descobrir o que eu estou fazendo errado. A URL solicitada está retornando XML e se eu visitar o URL diretamente, ele funciona bem.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
byte[] postDataBytes = Encoding.UTF8.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/xml";
request.ContentLength = postDataBytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postDataBytes, 0, postDataBytes.Length);
requestStream.Close();

// get response and write to console
response = (HttpWebResponse) request.GetResponse();
StreamReader responseReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
try {
   Response.Write(responseReader.ReadToEnd());
}
finally {
   responseReader.Close();
}
response.Close();
Foi útil?

Solução 3

Eu encontrei o problema. Não é com o código acima em tudo, mas com a página que está sendo chamado. A página que eu estava chamando foi herdada de uma classe cujo método Page_OnInit continha a seguinte linha: "MyBase.OnLoad (e)", o que causou o método Page_OnLoad a ser executado duas vezes. Obviamente, que deveria ter sido MyBase.OnInit (e) em seu lugar. Eu não pegá-lo, porque quando eu testei a página diretamente eu tinha que remover temporariamente a herança da classe por causa de algum outro código que teria me impedido de testar a página diretamente.

Agora vou colocar no meu chapéu de "burro" e retiro para o canto por um tempo fora. Obrigado de qualquer maneira para a ajuda.

Outras dicas

Onde é que o código está sendo executado a partir de? Isso pode ser completamente irrelevante, mas você já viu este artigo ..?

http://ddkonline.blogspot.com /2008/02/aspnet-double-postback-bug-strikes.html

Seu código parece bom, então eu não acho que o problema está lá ... mas o que eu sugiro é o seguinte:

1) Talvez o erro está na outra extremidade do URL ... então tentar bater Google e ver se o conteúdo retornado é bom ou não.

2) Coloque um ponto de interrupção no "responseReader.ReadToEnd ()" local, e ver se o que está saindo de lá é bom.

3) Se este código acima está em uma página ASPX ... está certificando-se de chamar de "Response.End ();" depois que você está última linha de código? (E não "resposne.close ()", mas "Response.End ()").

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