UploadstringCompletedEventArgs



UploadValuesCompletedEventArgs

WebClient

WebException

WebHeaderCollection

WebPermission

WebPermissionAttribute

WebProxy

WebRequest

WebRequestMethods

WebRequestMethods.File

WebRequestMethods.Ftp

WebRequestMethods.Http

WebResponse

WebUtility

 

Кроме того, в пространстве имен System.Net определены перечисленные ниже интерфейсы.

 

AuthenticationModule

IcertificatePolicy I Credential Pol icy

ICredentials

IcredentialsByHost IWebProxy

IWebProxyScript

IWebRequestCreate

 

В этом пространстве имен определяются также приведенные ниже перечисления.

 

AuthenticationSchemes

DecompressionMethods FtpStatusCode

HttpRequestHeader

HttpResponseHeader HttpStatusCode

NetworkAccess

SecurityProtocolType TransportType

WebExceptionStatus

 

Помимо этого, в пространстве имен System.Net определен ряд делегатов.

Несмотря на то что в пространстве имен System.Net определено немало членов, лишь немногие из них на самом деле требуются при решении наиболее типичных задач программирования для Интернета. Основу сетевых программных средств составляют абстрактные классы WebRequest и WebResponse. От этих классов наследуют все классы, поддерживающие конкретные сетевые протоколы. (Протокол определяет правила передачи данных по сети.) Например, к производным классам, поддерживающим стандартный сетевой протокол HTTP, относятся классы HttpWebRequest и HttpWebResponse.

Классы HttpWebRequest и HttpWebResponse довольно просты в использовании. Тем не менее решение некоторых задач можно еще больше упростить, применяя подход, основанный на классе WebClient. Так, если требуется только загрузить или выгрузить файл, то для этой цели лучше всего подойдет класс WebClient.

 

 

Универсальные идентификаторы ресурсов

 

В основу программирования для Интернета положено понятие универсального идентификйтора ресурса (URI), иногда еще называемого унифицированным указателем информационного ресурса (URL). Этот идентификатор описывает местоположение ресурса в сети. В корпорации Microsoft принято пользоваться сокращением URI при описании членов пространства имен System.Net, и поэтому в данной книге выбрано именно это сокращение для обозначения универсального идентификатора ресурса. Идентификаторы URI, без сомнения, известны каждому, кто хотя бы раз пользовался браузером для поиска информации в Интернете. По существу, это адрес информационного ресурса, который указывается в соответствующем поле окна браузера.

Ниже приведена общая форма идентификатора URI:

 

Протокол: //Идентификационный_номер_сервера/Путь_к_файлу/Запрос  

 

где Протокол — это применяемый протокол, например HTTP; Идентификационный_номер_сервера — конкретный сервер, например mhprofessional.com или HerbSchildt.com; Путь_к_файлу — путь к конкретному файлу. Если же Путь_к_ файлу не указан, то получается страница, доступная на указанном сервере по умолчанию. И наконец, Запрос обозначает информацию, отправляемую на сервер. Указывать Запрос необязательно. В C# идентификаторы URI инкапсулированы в класс Uri, рассматриваемый далее в этой главе.

 

 

Основы организации доступа к Интернету

 

 

В классах, находящихся в пространстве имен System.Net, поддерживается модель взаимодействия с Интернетом по принципу запроса и ответа. При таком подходе пользовательская программа, являющаяся клиентом, запрашивает информацию у сервера, а затем переходит в состояние ожидания ответа. Например, в качестве запроса программа может отправить на сервер идентификатор URI некоторого веб-сайта. В ответ она получит гипертекстовую страницу, соответствующую указанному идентификатору URL Такой принцип запроса и ответа удобен и прост в применении, поскольку большинство деталей сетевого взаимодействия реализуются автоматически.

На вершине иерархии сетевых классов находятся классы WebRequest и WebResponse, реализующие так называемые подключаемые протоколы. Как должно быть известно большинству читателей, для передачи данных в сети применяется несколько разнотипных протоколов. К числу наиболее распространенных в Интернете относятся протокол передачи гипертекстовых файлов (HTTP), а также протокол передачи файлов (FTP). При создании идентификатора URI его префикс обозначает применяемый сетевой протокол. Например, в идентификаторе http://www.HerbSchildt.com используется префикс http, обозначающий протокол передачи гипертекстовых файлов (HTTP).

Как упоминалось выше, классы WebRequest и WebResponse являются абстрактными, а следовательно, в них определенны в самом общем виде операции запроса и ответа, типичные для всех протоколов. От этих классов наследуют более конкретные производные классы, в которых реализуются отдельные протоколы. Эти производные классы регистрируются самостоятельно, используя для этой цели статический метод RegisterPrefix(), определенный в классе WebRequest. При создании объекта типа WebRequest автоматически используется протокол, указываемый в префиксе URI, если, конечно, он доступен. Преимущество такого принципа "подключения" протоколов заключается в том, что большая часть кода пользовательской программы остается без изменения независимо от типа применяемого протокола.

В среде выполнения .NET Runtime протоколы HTTP, HTTPS и FTP определяются автоматически. Так, если указать идентификатор URI с префиксом HTTP, то будет автоматически получен HTTP-совместимый класс, который поддерживает протокол HTTP. А если указать идентификатор URI с префиксом FTP, то будет автоматически получен FTP-совместимый класс, поддерживающий протокол FTP.

При сетевом подключении к Интернету чаще всего применяется протокол HTTP, поэтому именно он и рассматривается главным образом в этой главе. (Тем не менее аналогичные приемы распространяются и на все остальные поддерживаемые протоколы.) Протокол HTTP поддерживается в классах HttpWebRequest и HttpWebResponse. Эти классы наследуют от классов WebRequest и WebResponse, а кроме того, имеют собственные дополнительные члены, применимые непосредственно к протоколу HTTP.

В пространстве имен System.Net поддерживается как синхронная, так и асинхронная передача данных. В Интернете предпочтение чаще всего отдается синхронным транзакциям, поскольку ими легче пользоваться. При синхронной передаче данных пользовательская программа посылает запрос и затем ожидает ответа от сервера. Но для некоторых разновидностей высокопроизводительных приложений более подходящей оказывается асинхронная передача данных. При таком способе передачи данных пользовательская программа продолжает обработку данных, ожидая ответа на переданный запрос. Но организовать асинхронную передачу данных труднее. Кроме того, не во всех программах можно извлечь выгоды из асинхронной передачи данных. Например, когда требуется получить информацию из Интернета, то зачастую ничего другого не остается, как ожидать ее. В подобных случаях потенциал асинхронной передачи данных используется не полностью. Вследствие того что синхронный доступ к Интернету реализуется проще и намного чаще, именно он и будет рассматриваться в этой главе.

Далее речь пойдет прежде всего о классах WebRequest и WebResponse, поскольку именно они положены в основу сетевых программных средств, доступных в пространстве имен System.Net.

 

 

Класс WebRequest

 

Класс WebRequest управляет сетевым запросом. Он является абстрактным, поскольку в нем не реализуется конкретный протокол. Тем не менее в нем определяются те методы и свойства, которые являются общими для всех сетевых запросов. В табл. 26.1 сведены методы, определенные в классе WebRequest и поддерживающие синхронную передачу данных, а в табл. 26.2 — свойства, объявляемые в классе WebRequest. Устанавливаемые по умолчанию значения свойств задаются в производных классах. Открытые конструкторы в классе WebRequest не определены.

Для того чтобы отправить запрос по адресу URI, необходимо сначала создать объект класса, производного от класса WebRequest и реализующего требуемый протокол. С этой целью вызывается статический метод Create(), определенный в классе WebRequest. Метод Create() возвращает объект класса, наследующего от класса WebRequest и реализующего конкретный протокол.

 

Таблица 26.1. Методы, определенные в классе WebRequest

Метод -  Описание

 

public static WebRequest Create(string  requestUriString) -  Создает объект типа WebRequest для идентификатора URI, указываемого в строке requestUriString. Возвращаемый объект реализует протокол, заданный префиксом идентификатора URI. Следовательно, возвращаемый объект будет экземпляром класса, призводного от класса WebRequest. Если затребованный протокол недоступен, то генерируется исключение NotSupportedException. А если недействителен указанный формат идентификатора URI, то генерируется исключение UriFormatException

public static WebRequest Create(Uri requestUri) -   Создает объект типа WebRequest для идентификатора URI, указываемого с помощью параметра reques tUri.   Возвращаемый объект реализует протокол, заданный префиксом идентификатора URI. Следовательно, возвращаемый объект будет экземпляром класса, призводного от класса WebRequest. Если затребованный протокол недоступен, то генерируется исключение NotSupportedException 

public virtual Stream GetRequestStream() -  Возвращает поток вывода, связанный с запрошенным ранее идентификатором URI

public virtual WebResponse GetResponse() - Отправляет предварительно сформированный запрос и джидает ответа. Получив ответ, возвращает его в виде объекта класса WebReponse. Этот объект используется затем в программе для получения информации по указанному адресу URI

 

Таблица 26.2. Свойства, определенные в классе WebRequest

Свойство -  Описание

public AuthenticationLevel AuthenticationLevel( get; set; } -  Получает или устанавливает уровень аутентификации

public virtual RequestCachePolicy CachePolicy { get; set; } -  Получает или устанавливает правила использования кеша, определяющие момент получения ответа из кеша

public virtual string ConnectionGroupName { get; set; } -  Получает или устанавливает имя группы подключения. Группы подключения представляют собой способ создания ряда запросов. Они не нужны для простых транзакций в Интернете

public virtual long ContentLength { get; set; } -  Получает или устанавливает длину передаваемого содержимого

public virtual string ContentType { get; set; } -  Получает или устанавливает описание передаваемого содержимого

public virtual Icredentials Credentials { get; set; } -  Получает или устанавливает мандат, т.е. учетные данные пользователя

public static RequestCachePolicy DefaultCachePolicy { get; set; } -  Получает или устанавливает правила использования кеша по умолчанию, определяющие момент получения ответа из кеша

public static IWebProxy DefaultWebProxy { get; set; } -  Получает или устанавливает используемый поумолчанию прокси-сервер

public virtual WebHeaderCollection Headers{ get; set; } -  Получает или устанавливает коллекцию заголовков

public TokenlmpersonationLevel ImpersonationLevel { get; set; } -  Получает или устанавливает уровень анонимного воплощения

public virtual string Method { get; set; } -  Получает или устанавливает протокол

public virtual bool PreAuthenticate { get; set; } -  Если принимает логическое значение true, то в отправляемый запрос включается информация для аутентификации. А если принимает логическое значение false, то информация для аутентификации предоставляется только по требованию адресата URI

public virtual IWebProxy Proxy { get; set; } -  Получает или устанавливает прокси-сервер. Применимо только в тех средах, где используется прокси-сервер

public virtual Uri RequestUri { get; } -  Получает идентификатор URI конкретного запроса

public virtual int Timeout { get; set; } -  Получает или устанавливает количество миллисекунд, в течение которых будет ожидаться ответ на запрос. Для установки бесконечного ожидания используется значение Timeout. Infinite

public virtual bool UseDefaultCredential { get; set; } - Получает или устанавливает значение, которое определяет, используется ли для аутентификации устанавливаемый по умолчанию мандат. Если имеет логическое значение true, то используется устанавливаемый по умолчанию мандат, т.е. учетные данные пользователя, в противном случае этот мандат не используется

 

 

Класс WebResponse

 

В классе WebResponse инкапсулируется ответ, получаемый по запросу. Этот класс является абстрактным. В наследующих от него классах создаются отдельные его версии, поддерживающие конкретный протокол. Объект класса WebResponse обычно получается в результате вызова метода GetResponse(), определенного в классе WebRequest. Этот объект будет экземпляром отдельного класса, производного от класса WebResponse и реализующего конкретный протокол. Методы, определенные в классе WebResponse, сведены в табл. 26.3, а свойства, объявляемые в этом классе, — в табл. 26.4. Значения этих свойств устанавливаются на основании каждого запроса в отдельности. Открытые конструкторы в классе WebResponse не определяются.

 

Таблица 26.3. Наиболее часто используемые методы, определенные в классе WebResponse

Метод -  Описание

 

public virtual void Close()  

Закрывает ответный поток. Закрывает также поток ввода ответа, возвращаемый методом

GetResponseStream()


Дата добавления: 2019-02-12; просмотров: 263; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!