2010-12-15 14 views
7

Nigdy wcześniej nie korzystałem z WebClient i nie jestem pewien, czy powinienem sprawdzić odpowiedź z serwera, aby dowiedzieć się, czy przesyłanie zakończyło się sukcesem, czy też mogę pozwolić, aby plik został przesłany, jeśli nie ma wyjątków.Czy powinienem sprawdzić odpowiedź WebClient.UploadFile, aby dowiedzieć się, czy przesyłanie zakończyło się powodzeniem?

Jeśli powinienem sprawdzić odpowiedź, jak mogę to zrobić? Analizowanie właściwości resposeHeaders?

Z góry dziękuję.

Odpowiedz

16

Metoda UploadFile zwraca wartość byte[], która zawiera odpowiedź zwróconą przez serwer zdalny. W zależności od tego, jak serwer zarządza odpowiedziami na żądania przesyłania (i warunkami błędu (patrz uwaga 1 poniżej)), musisz sprawdzić tę odpowiedź. Można uzyskać odpowiedź ciąg konwertując go do łańcucha, na przykład będzie to napisać odpowiedź w oknie konsoli:

byte[] rawResponse = webClient.UploadFile(url,fileName); 
Console.WriteLine("Remote Response: {0}", System.Text.Encoding.ASCII.GetString(rawResponse)); 

To powiedziawszy, jeśli zdalny serwer zwraca coś innego niż HTTP 200 (tj sukcesu) połączenia do UploadFile wrzuci wyjątek WebException. To można złapać i uporać się z nim w sposób, który najlepiej pasuje do twojej aplikacji.

więc oddanie że wszyscy razem

try 
{ 
    WebClient webClient = new WebClient(); 
    byte[] rawResponse = webClient.UploadFile(url,fileName); 

    string response = System.Text.Encoding.ASCII.GetString(rawResponse); 

    ... 
    Your response validation code 
    ... 
} 
catch (WebException wexc) 
{ 
    ... 
    Handle Web Exception 
    ... 
} 

Uwaga 1 Jako przykład mam usługę przesyłania plików, które nigdy nie wyda niczego innego niż kod HTTP 200, wszystkie błędy zostały złowione w ramach usługi i te są "przetwarzane" na strukturę XML, która jest zwracana do wywołującego. Osoba wywołująca następnie analizuje ten plik XML, aby sprawdzić, czy przesyłanie zakończyło się powodzeniem.

+0

Dzięki, miłe wyjaśnienie. Przejdę przez witrynę SharePoint, więc spodziewam się znaleźć odpowiedzi na normalne serwery, więc nie muszę sprawdzać odpowiedzi. –

2

W wersji examples pod adresem msdn sprawdzają odpowiedź, więc może to być dobry styl, ale nie staram się tego zrobić samodzielnie i jeszcze się nie spaliłem.

2

Jeśli przesyłanie zwróci kod stanu inny niż 200 (lub zakres 200), WebClient.UploadFile powinien wywołać wyjątek WebException.

Jako wtyczka, mam bibliotekę kodów na BizArk, która zawiera klasę WebHelper, która ułatwia przesyłanie wielu plików i tworzenie wartości w tym samym czasie. Projekt nosi nazwę BizArk.

+0

Więc jeśli odpowiedź jest zła, to wyjątek WebException jest automatycznie podnoszony? –