PipelineFailure

ProtocolError

ProxyNameResolutionFailure

ReceiveFailure

RequestCanceled

RequestProhibitedByCachePolicy

RequestProhibitedByProxy

SecureChannelFailure

SendFailure

ServerProtocolViolation

Success

Timeout

TrustFailure

UnknownError

Как только будет выяснена причина ошибки, в программе могут быть предприняты соответствующие действия.

Исключения, генерируемые методом GetResponseStream

Длясоединения по протоколу HTTP методGetResponseStream из классаWebResponseможет сгенерировать исключениеProtocolViolationException,которое в целом означает, что в работе по указанному протоколу произошла ошибка. Что же касается методаGetResponseStream, то это означает, что ни один из действительных ответных потоков недоступен. ИсключениеObjectDisposedExceptionгенерируется в том случае, если ответ уже утилизирован. А исключениеIOException,конечно, генерируется при ошибке чтения из потока, в зависимости от того, как организован ввод данных.

Обработка исключений

В приведенном ниже примере программы демонстрируется обработка всевозможных сетевых исключений, которые могут возникнуть в связи с выполнением программы из предыдущего примера, в которую теперь добавлены соответствующие обработчики исключений.

// Пример обработки сетевых исключений.

using System; using System.Net; using System.10;

class NetExcDemo { static void Main { int ch;

try {

// Сначала создать объект запроса типа WebRequest по указанному URI. HttpWebRequest req = (HttpWebRequest)

WebRequest.Create ("http://www.McGraw-Hill.com");

// Затем отправить сформированный запрос и получить на него ответ. HttpWebResponse resp = (HttpWebResponse) req.GetResponse ;

// Получить из ответа поток ввода.

Stream istrm = resp.GetResponseStream;

/* А теперь прочитать и отобразить гипертекстовое содержимое,

полученное по указанному URI. Это содержимое выводился на экран отдельными порциями по 400 символов. После каждой такой порции следует нажать клавишу , чтобы вывести на экран следующую порцию, состоящую из 400 символов. */ for(int i=l; ; i++) { ch = istrm.ReadByte; if(ch == -1) break;

Console.Write ( (char) ch) ; if((i % 4 0 0)==0) {

Console.Write ("ХпНажмите клавишу .");

Console.ReadLine ;

}

}

// Закрыть ответный поток. При этом закрывается // также поток ввода istrm. resp.Close ;

} catch(WebException exc) {

Console.WriteLine ("Сетевая ошибка: " + exc.Message +

"\пКод состояния: " + exc.Status);

} catch(ProtocolViolationException exc) {

Console.WriteLine("Протокольная ошибка: " + exc.Message);

} catch(UriFormatException exc) {

Console.WriteLine("Ошибка формата URI: " + exc.Message);

Перейти на страницу:

Похожие книги