2011-02-15 12 views
9

Jak mogę przesłać duży ciąg (w moim przypadku XML z BLOB) z POST bez uzyskania limitu czasu za pomocą GetResponse?C#: Jak POST duży ciąg za pośrednictwem WebRequest?

Zmiana limitu czasu pomaga, ale tak naprawdę nie jest rozwiązaniem. Jeśli serwer jest naprawdę śmiertelny lub POST został przerwany, muszę poczekać na bardzo duży limit czasu.

Każdy pomysł?

HttpWebRequest webRequest = null; 
string response = ""; 
byte[] bytes = Encoding.UTF8.GetBytes(xml); 

try 
{ 
    webRequest = (HttpWebRequest)WebRequest.Create("http://" + this.host + ":" + this.port); 
    webRequest.ContentType = "application/x-www-form-urlencoded"; 
    webRequest.Method = "POST"; 
    webRequest.Timeout = 5000; 

    webRequest.ContentLength = bytes.Length; 
    using (Stream requeststream = webRequest.GetRequestStream()) 
    { 
     requeststream.Write(bytes, 0, bytes.Length); 
     requeststream.Close(); 
    } 

    using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) 
    { 
     using (StreamReader sr = new StreamReader(webResponse.GetResponseStream())) 
     { 
      response = sr.ReadToEnd().Trim(); 
      sr.Close(); 
     } 
     webResponse.Close(); 
    } 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.ToString()); 
} 
return response; 
+0

Zastosowanie powinny być zaprojektowane tak, że przyzwyczajenie się do POST bardzo duże ilości danych. –

+0

Moje podejście do tematu jest takie samo. Jeśli zauważysz, że "platforma" go nie obsługuje, spróbuj znaleźć inny sposób, aby to zrobić. W przeciwnym razie wybrałbym podejście @Marc Gravell z kompresją gzip i ograniczoną liczbą ładowań. –

Odpowiedz

3

Tak, jest to oczekiwane działanie protokołu HTTP.

Opcje:

  • mają duży limit czasu (już zrobione) i przyjąć, że może to zająć dużo czasu, aby legalnie limit czasu (w przeciwieństwie do zajmuje dużo czasu, ponieważ przepustowość)
  • może możesz zastosować gzip na żądanie (i poinformować serwer, że wysyłasz plik skompresowany); Szczerze mówiąc nie wiem, czy jest to obsługiwane automatycznie: automatycznie, ale może to być wykonane przez api jawnie sprawdzające dla konkretnego nagłówka i zastosowanie dekompresji gzip na ładunek
  • zmienić api, aby wykonać kilka małych uploadów, a komunikat zakończenia
  • z tym żyć
+8

Próbowałem tej ostatniej opcji, wydaje się nie działać. –

+0

Niestety WebService akceptuje tylko łańcuchy XML. Potem muszę użyć długiego czasu oczekiwania. Dzięki – Wowa

Powiązane problemy