Книга: C# 4.0: полное руководство

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

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

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

// Пример обработки сетевых исключений.
using System;
using System.Net;
using System.IO;
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 символов. После каждой такой порции следует нажать клавишу <ENTER>, чтобы вывести на экран следующую порцию, состоящую из 400 символов. */
      for (int i = 1; ; i++) {
        ch = istrm.ReadByte(); if (ch == -1) break;
        Console.Write((char)ch); if ((i % 400) == 0) {
          Console.Write("nНажмите клавишу <Enter>.");
          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);
    }
    catch (NotSupportedException exc) {
      Console.WriteLine("Неизвестный протокол: " + exc.Message);
    }
    catch (IOException exc) {
      Console.WriteLine("Ошибка ввода-вывода: " + exc.Message);
    }
    catch (System.Security.SecurityException exc) {
      Console.WriteLine("Исключение в связи с нарушением безопасности: " + exc.Message);
    }
    catch (InvalidOperationException exc) {
      Console.WriteLine("Недопустимая операция: " + exc.Message);
    }
  }
}

Теперь перехватываются все исключения, которые могут быть сгенерированы сетевыми методами. Так, если изменить вызов метода Create() следующим образом:

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

а затем перекомпилировать и еще раз выполнить программу, то в результате может быть выдано приведенное ниже сообщение об ошибке.

Сетевая ошибка: Удаленный сервер возвратил ошибку: (404) Не найден.
Код состояния: ProtocolError

На веб-сайте по адресу www.McGraw-Hill. com отсутствует раздел moonrocket, и поэтому он не найден по указанному URI, что и подтверждает приведенный выше результат.

Ради краткости и ясности в программах большинства примеров из этой главы отсутствует полноценная обработка исключений. Но в реальных приложениях она просто необходима.

Оглавление книги


Генерация: 0.103. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз