Pobieram sobie asynchronicznie xmle po http za pomocą HttpWebRequest:
webRequest = (HttpWebRequest)WebRequest.Create(uri);
webRequest.Headers.Remove("decyzje");
webRequest.Headers.Add("decyzje", mDecyzje.XmlDecyzje.OuterXml);
webRequest.BeginGetResponse(new AsyncCallback(download_Completed), null);
A oto mój download_Completed:
private void download_Completed(IAsyncResult result)
{
try
{
HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(result);
Stream responseStream = webResponse.GetResponseStream();
mXmlKsiazka.Load(responseStream);
string raport = Uri.UnescapeDataString(webResponse.Headers["raport"]);
raport = DecodeUtf8(raport);
mRaport.LoadXml(raport);
WypelnijDane();
}
catch (Exception e)
{
MessageBox.Show("Błąd w trakcie pobierania \r\n\r\n" + e.Message, "Błąd w trakcie pobierania", MessageBoxButtons.OK, MessageBoxIcon.Error);
if (this.InvokeRequired)
this.BeginInvoke(new MethodInvoker(delegate() { this.Close(); }));
else
this.Close();
}
}
Zwrócony xml może być bardzo duży, i zwracany header "raport" też może być bardzo duży. I właśnie w takich przypadkach, na linijce:
HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(result);
Rzucany jest wyjątek:
"Połączenie podstawowe zostało zakończone: Przekroczono limit długości komunikatu."
Z tymże wydaje mi się, iż nie jest to problem konfiguracji serwera (długości headera np.), ponieważ gdy odpalam zapytanie przez przeglądarkę, zwracany jest i xml i header i nie robi problemów.
Czy HttpWebRequest ma jakieś ograniczenia na długość zwrotu...?
Czy może konieczne będzie przesyłanie wiadomości w chunkach?