Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Для того чтобы отправить запрос, в рассматриваемой здесь программе вызывается метод GetResponse()
для объекта типа WebRequest
. Отправив запрос, метод GetResponse()
переходит в состояние ожидания ответа. Как только ответ будет получен, метод GetResponse()
возвратит объект типа WebResponse
, в котором инкапсулирован ответ. Этот объект присваивается переменной resp
. Но в данном случае ответ принимается по протоколу HTTP, и поэтому полученный результат приводится к типу HttpWebResponse
. Среди прочего в ответе содержится поток, предназначаемый для чтения данных из источника по указанному URL
Далее поток ввода получается в результате вызова метода GetResponseStream()
для объекта resp
. Это стандартный объект класса Stream
со всеми атрибутами и средствами, необходимыми для организации потока ввода. Ссылка на этот поток присваивается переменной istrm
, с помощью которой данные могут быть прочитаны из источника по указанному URI, как из обычного файла.
После этого в программе выполняется чтение данных из веб-сайта издательства McGraw-Hill по адресу www .McGraw-Hill. com и последующий их вывод на экран. А поскольку этих данных много, то они выводятся на экран отдельными порциями по 400 символов, после чего в программе ожидается нажатие клавиши , чтобы продолжить вывод. Благодаря этому выводимые данные можно просматривать без прокрутки экрана. Обратите внимание на то, что данные читаются посимвольно с помощью метода ReadByte()
. Напомним, что этот метод возвращает очередной байт из потока ввода в виде значения типа int
, которое требуется привести к типу char
. По достижении конца потока этот метод возвращает значение -1.
И наконец, ответный поток закрывается при вызове метода Close()
для объекта resp
. Вместе с ответным потоком автоматически закрывается и поток ввода. Ответный поток следует закрывать в промежутках между последовательными запросами. В противном случае сетевые ресурсы могут быть исчерпаны, препятствуя очередному подключению к Интернету.
И в заключение анализа рассматриваемого здесь примера следует обратить особое внимание на следующее: для отображения гипертекстового содержимого, получаемого от сервера, совсем не обязательно использовать объект типа HttpWebRequest
или HttpWebResponse
. Ведь для решения этой задачи в данной программе оказалось достаточно стандартных методов, определенных в классах WebRequest
и WebResponse
, и не потребовалось прибегать к специальным средствам протокола HTTP. Следовательно, вызовы методов Create()
и GetResponse()
можно было бы написать следующим образом.
// Сначала создать объект запроса типа WebRequest по указанному URI.
WebRequest req = WebRequest.Create("http://www.McGraw-Hill.com");
// Затем отправить сформированный запрос и получить на него ответ.
WebResponse resp = req.GetResponse() ;
В тех случаях, когда не требуется приведение к конкретному типу реализации протокола, лучше пользоваться классами WebRequest
и WebResponse
, так как это дает возможность менять протокол, не оказывая никакого влияния на код программы. Но поскольку во всех примерах, приведенных в этой главе, используется протокол HTTP, то в ряде примеров демонстрируются специальные средства этого протокола из классов HttpWebRequest
и HttpWebResponse
.
Обработка сетевых ошибок
Программа из предыдущего примера составлена верно, но она совсем не защищена от простейших сетевых ошибок, которые способны преждевременно прервать ее выполнение. Конечно, для программы, служащей в качестве примера, это не так важно, как для реальных приложений. Для полноценной обработки сетевых исключений, которые могут быть сгенерированы программой, необходимо организовать контроль вызовов методов Create(), GetResponse()
и GetResponseStream()
. Следует особо подчеркнуть, что генерирование конкретных исключений зависит от используемого протокола. И ниже речь пойдет об ошибках, которые могут возникнуть при использовании протокола HTTP, поскольку средства сетевого подключения к Интернету, доступные в С#, рассматриваются в настоящей главе на примере именно этого протокола.
Метод Create()
, определенный в классе WebRequest
, может генерировать четыре исключения. Так, если протокол, указываемый в префиксе URI, не поддерживается, то генерируется исключение NotSupportedException
. Если формат URI оказывается недействительным, то генерируется исключение UriFormatException
. А если у пользователя нет соответствующих полномочий для доступа к запрашиваемому сетевому ресурсу, то генерируется исключение System.Security.SecurityException
. Кроме того, метод Create()
генерирует исключение ArgumentNullException
, если он вызывается с пустой ссылкой, хотя этот вид ошибки не имеет непосредственного отношения к сетевому подключению.
При вызове метода GetResponse()
для получения ответа по протоколу HTTP может произойти целый ряд ошибок. Эти ошибки представлены следующими исключениями: InvalidOperationException
, ProtocolViolationException
, NotSupportedException
и WebException
. Наибольший интерес среди них вызывает исключение WebException
.
У исключения WebException
имеются два свойства, связанных с сетевыми ошибками: Response
и Status
. С помощью свойства Response
можно получить ссылку на объект типа WebResponse
в обработчике исключений. Для соединения по протоколу HTTP этот объект описывает характер возникшей ошибки. Свойство Response
объявляется следующим образом.
public WebResponse Response { get; }
Когда возникает ошибка, то с помощью свойства Status
типа WebException
можно выяснить, что именно произошло. Это свойство объявляется следующим образом:
public WebExceptionStatus Status {get; }
где WebExceptionStatus
— это перечисление, которое содержит приведенные ниже значения.
CacheEntryNotFound
ConnectFailure
ConnectionClosed
KeepAliveFailure
MessageLengthLimitExceeded
NameResolutionFailure
Pending
PipelineFailure
ProtocolError
ProxyNameResolutionFailure
ReceiveFailure
RequestCanceled
RequestProhibitedByCachePolicy
RequestProhibitedByProxy
SecureChannelFailure
SendFailure
ServerProtocolViolation
Success
Timeout
TrustFailure
UnknownError
Как только будет выяснена причина ошибки, в программе могут быть предприняты соответствующие действия.
Читать дальшеИнтервал:
Закладка: