Bij het downloaden van een bestand met HttpWebResponse is de door de server verzonden lengte van de inhoud onjuist en zorgt ervoor dat de HttpWebResponse stopt met het downloaden van het bestand halverwege. IE lijkt dit probleem niet te hebben wanneer u bladert. Elk idee over hoe HttpWebResponse te verkrijgen, negeert de lengte van de inhoud die de sever heeft verzonden of zou dat zelfs zinvol maken.
Alle hulp die zou kunnen worden gegeven zou zeer op prijs worden gesteld.
--Voorbeeld
class Program
{
static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:59771/Default.aspx");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Console.WriteLine("Content length: " + response.ContentLength);
int bytesRead = 0;
long totalBytesRead = 0;
byte[] data = new byte[1024 * 64];
StringBuilder output = new StringBuilder();
Stream responseStream = response.GetResponseStream();
do
{
bytesRead = responseStream.Read(data, 0, 1024 * 64);
totalBytesRead += bytesRead;
output.Append(Encoding.ASCII.GetString(data, 0, bytesRead));
}
while (bytesRead > 0);
Console.WriteLine("total read: " + totalBytesRead);
Console.WriteLine("last content read: " + output.ToString());
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Clear();
Response.ClearHeaders();
Response.AddHeader("Content-Length", "13");
Response.Write("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}
}
Probleem opgelost!
De server waar we de gegevens naar toe halen is een Cognos-server en het berekende de lengte van de inhoud alsof de string moest worden gecomprimeerd, maar we verzond de code niet naar de staat waarin we compressie konden accepteren, dus het zou ongecomprimeerde terugsturen gegevens, maar alleen voor de lengte van de compressie. IE had dit probleem niet omdat het beweerde dat het compressie kon accepteren.
Code om probleem te verhelpen:
request2.Headers.Add("Accept-Encoding", "gzip,deflate");