синхронная, так и асинхронная передача данных. В Интернете предпочтение чаще всего отдается синхронным транзакциям, поскольку ими легче пользоваться. При синхронной передаче данных пользовательская программа посылает запрос и затем ожидает ответа от сервера. Но для некоторых разновидностей высокопроизводительных приложений более подходящей оказывается асинхронная передача данных. При таком способе передачи данных пользовательская программа продолжает обработку данных, ожидая ответа на переданный запрос. Но организовать асинхронную передачу данных труднее. Кроме того, не во всех программах можно извлечь выгоды из асинхронной передачи данных. Например, когда требуется получить информацию из Интернета, то зачастую ничего другого не остается, как ожидать ее. В подобных случаях потенциал асинхронной передачи данных используется не полностью. Вследствие того что синхронный доступ к Интернету реализуется проще и намного чаще, именно он и будет рассматриваться в этой главе.
Далее речь пойдет прежде всего о классах WebRequest и WebResponse, поскольку именно они положены в основу сетевых программных средств, доступных в пространстве имен System.Net.
Класс WebReques t
Класс WebRequest управляет сетевым запросом. Он является абстрактным, поскольку в нем не реализуется конкретный протокол. Тем не менее в нем определяются те методы и свойства, которые являются общими для всех сетевых запросов. В табл. 26.1 сведены методы, определенные в классе WebRequest и поддерживающие синхронную передачу данных, а в табл. 26.2 — свойства, объявляемые в классе WebRequest. Устанавливаемые по умолчанию значения свойств задаются в производных классах. Открытые конструкторы в классе WebRequest не определены.
Для того чтобы отправить запрос по адресу URI, необходимо сначала создать объект класса, производного от класса WebRequest и реализующего требуемый протокол. С этой целью вызывается статический метод Create (), определенный в классе WebRequest. Метод Create () возвращает объект класса, наследующего от класса WebRequest и реализующего конкретный протокол.
Таблица 26.1. Методы, определенные в классе WebRequest
Метод
Описание
public static WebRequest
Создает объект типа WebRequest для иден
Create (string
тификатора URI, указываемого в строке
Метод
Описание
public static WebRequest Create(Uri
public virtual Stream GetRequestStream() public virtual WebResponse GetResponse()
Создает объект типа WebRequest для идентификатора 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; }
public virtual IWebProxy Proxy { get; set; }
public virtual Uri RequestUri { get; }
public virtual int Timeout { get; set; }
public virtual bool UseDefaultCredential { get; set; }
Получает или
