Architecture Net или что такое Microsoft.NET?




Клиент для Web-службы Add (Сложение)

Безусловно, у вас возникнет желание написать клиентские программы, которые входят в состав распределенного приложения и используют Web-службу. Вскоре мы это сделаем. Пока же в качестве клиента мы будем использовать Internet Explorer. С его помощью мы изучим протокол, который используется для обмена данными с Web-службой. Чтобы начать, введите в адресной строке Internet Explorer следующий унифицированный указатель информационного ресурса (URL):

http: //localhost/SimpleWebService/Add.asmx.

Если вы щелкните на ссылке Add (Сложение), то будет выведена форма, заполнив которую, вы сможете отослать запрос Web-службе Add (Сложение). Вслед за формой, на этой же странице, будет приведено описание различных протоколов, которые протокол передачи гипертекстовых файлов HTTP использует для того, чтобы отослать запрос. В наших целях заслуживают внимания два протокола- HTTP GET и SOAP.
Мы рассмотрим протокол HTTP GET, поскольку именно он используется формой, отображаемой в окне Internet Explorer. В этом протоколе, метки-заполнители, которые заменяются фактическими данными, выделены жирным шрифтом:

GET /SimpleWebService/Add.asmx/Add?x=string&y=string HTTP/1.1 1

Введенные в форму данные кодируются как часть унифицированного указателя информационного ресурса (URL). (Это стандартный способ выполнения запроса с помощью метода GET протокола передачи гипертекстовых файлов HTTP.) Возвращаемые данные имеют следующий формат:

НТТР/1.1 200 ОК
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="l.0" encoding="utf-8"?> <int xmlns="http://tempuri.org/">int</int>

На рис. 11.2 показана заполненная форма с введенными значениями слагаемых Если теперь щелкнуть на кнопке Invoke (Активизировать), будет вызвана соответствующая Web-служба.
Затем появится окно Internet Explorer, в котором будет отображена часть данных ответа, сгенерированного Web-службой и передаваемого ею по протоколу передачи гипертекстовых файлов HTTP Фактическое возвращаемое значение (результат) содержится среди этих данных

<?xml version="1.0" encoding="utf-8" ?>
<int xmlns="http://tempuri.org/">9</int>

Возвращаемые данные имеют формат, определенный в описании протокола, однако вместо метки-заместителя подставлен ответ (9). Следует обратить внимание, что по протоколу HTTP GET могут передаваться лишь простые типы данных.

2.gif

Рис 11.2 В окне Internet Explorer отображается форма, в которую уже введены данные

Более интересным является протокол SOAP Он кодирует запросы и ответы с помощью метода POST протокола передачи гипертекстовых файлов HTTP Данные, которые фактически передаются в запросе, подставляются вместо меток-заполнителей В листинге метки-заполнители выделены жирным шрифтом
Сначала мы рассмотрим формат запросов протокола SOAP, передаваемых с помощью метода POST протокола передачи гипертекстовых файлов HTTP Первая часть такого запроса содержит набор заголовков, относящийся к протоколу передачи гипертекстовых файлов HTTP В информационной части (в разделе данных) запроса (теле объекта), передаваемого по протоколу передачи гипертекстовых файлов HTTP, содержатся данные Для описания этих данных протокол SOAP использует язык XML Описание данных всегда отделяется от заголовков пустой строкой Заголовок content-length (длина содержимого) определяет длину данных, которая зависит от размера параметров в информационной части (в разделе данных) запроса
Заголовок method (метод) указывает файл, которому будет направлен запрос Здесь также можно указать имя объекта, который будет обрабатывать запрос (конечную точку) В заголовке SOAPAction (SOAP-Действие) указывается имя метода, который вызывается Web-службой, и пространство имен, которому он принадлежит [Читатели, знакомые с моделью компонентных объектов Microsoft (COM), увидят аналогию между описанием методов с помощью пространства имен и определением глобально уникального идентификатора интерфейса (Interface Identifier— IID) с помощью глобально уникального идентификатора (Globally Unique Identifier — GUID) ].
Для описания параметров метода в протоколе SOAP используется язык XML [Аналогом языка описания интерфейсов (Interface Definition Language — IDL), используемого в модели компонентных объектов Microsoft (COM), является язык описания Web-служб (Web Services Description Language — WSDL), который будет рассмотрен несколько позже Протокол SOAP является аналогом сетевого формата NDR (Network Data Representation), который используется в распределенной модели компонентных объектов DCOM (Distributed Component Object Model) Все параллели, которые можно провести между технологией Web стужб и моделью компонентных объектов Microsoft (COM), описаны в статье Дона Бокса (Don Box) A Young Person's Guide to the Simple Object Access Protocol (Руководство для молодого человека по Простому протоколу доступа к объектам) которая появилась в 2000 году в мартовском выпуске собрания документов компании Microsoft MSDN (Microsoft Developer Network)]. В информационной части (теле) SOAP-запроса содержатся параметры, передаваемые вызываемому методу При реальном вызове метода вместо меток-заполнителей int будут подставлены фактические параметры, которые нужно передать методу Web-службы

POST /SimpleWebService/Add.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http.//tempuri.org/Add"
<">xml version="l 0" encoding="utf-8'"5>
<soap:Envelope xmlns xsi="http://www.w3 org/2001/XMLSchemainstance"
xmlns:xsd="http.//www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Add xmlns="http //tempun.org/"> <x>int</x> <y>int</y> </Add>
</soap.Body> </soap:Envelope>

Ниже мы опишем ответ, передаваемый по протоколу SOAP с помощью метода POST протокола передачи гипертекстовых файлов HTTP В ответе метка-заполнитель int замещается фактическим возвращаемым значением

НТТР/1.1 200 ОК
Content-Type: text/xml; charset=utf-8
Content-Length, length
<?xml version="1.0" encoding="utf-8'">>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xmlns:xsd="http.//www.w3 org/2001/XMLSchema"
xmlns soap="http //schemas.xmlsoap org/soap/envelope/">
<soap.Body>
<AddResponse xmlns="http //tempuri org/">
<AddResult>int</AddResult>
</AddResponse>
</soap.Body>
</soap:Envelope>