Por que estou recebendo uma “resposta dupla” de HttpWebResponse?
-
04-07-2019 - |
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();
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 ()").