на начало
На главную страницу
Форум   

Клиент web-службы, использующий необработанные данные SOAP и протокол передачи гипертекстовых файлов HTTP

страницы в данном разделе 
» Глава 11. Web-службы » Web-службы
» Протоколы » Язык XML
» Пространства имен XML (XML Namespeces) » Схема XML (XML schema)
» Протокол SOAP » Язык описания Web-служб WSDL
» Архитектура Web-службы » Пример Web-службы Add (Сложение)
» Просмотр Web-службы Add (Сложение) при помощи броузера » Отладка Web-службы Add (Сложение)
» Клиент для Web-службы Add (Сложение) » Язык описания Web-служб (Web Services Description Language — WSDL)
» Классы-заместители » Клиент web-службы, использующий необработанные данные SOAP и протокол передачи гипертекстовых файлов HTTP
» Особенности форматирования данных согласно спецификации SOAP » Класс WebService
» Использование шаблона Managed C++ web Service » Код, генерируемый шаблоном Managed C++ Web Service
» Арифметическая Служба Сети, или Web-служба Arithmetic » Использование внутренних объектов
» Web-служба Hotel Broker » Web-служба Customer (Клиент)
» Web-служба Hotel Broker (Брокер гостиницы) » Соображения по поводу проектирования
» Резюме »  

Статья :: Клиент web-службы, использующий необработанные данные SOAP и протокол передачи гипертекстовых файлов HTTP

Клиент web-службы, использующий необработанные данные SOAP и протокол передачи гипертекстовых файлов HTTP

Клиент web-службы, использующий необработанные данные SOAP и протокол передачи гипертекстовых файлов HTTP

Чтобы проиллюстрировать возможности класса SoapHttpClientProtocol, окончательный вариант клиентской программы использует сокеты. Сокеты позволяют отсылать как заголовки протокола передачи гипертекстовых файлов HTTP, так и сами данные в формате SOAP, а также получать ответ от Web-служб. Клиентская программа расположена в подкаталоге RawAddClient каталога SimpleWebService.
Сначала главная (main) функция программы читает файл SoapAdd.txt. Этот файл содержит SOAP-заголовки вызываемой Web-службы. Данная функция возвращает длину содержимого, которое фигурирует в соответствующем заголовке запроса, формируемого методом POST протокола передачи гипертекстовых файлов HTTP.

long contentLength = 0;
StringBuilder *contentData =
BuildContent(
"SoapAdd.txt", ScontentLength);
StringBuilder *requestHeader =
BuildHeader(contentLength);

Затем клиентская программа устанавливает связь с сервером, отсылает ему данные и получает от сервера ответ, который выводится на консоль.

IPEndPoint *endPoint =
new IPEndPoint(
dynamic_cast<IPAddress *>
(Dns::Resolve(httpServer)->AddressList->
get_Item(0)),
httpPort);
Socket *sock =
new Socket(
AddressFamily::Internetwork,
SocketType::Stream,
ProtocolType::Tcp);
sock->Connect(endPoint);
...
sock->Send(
header, header->Length, SocketFlags::None);
// заголовок, заголовок-> Длина
sock->Send( // Посылает
content, content->Length, SocketFlags::None);
// содержание, содержание-> Длина
...
bytes = sock->Receive( // Получить
receivedData,
receivedData->Length, // Длина
SocketFlags::None);
Console::WriteLine(
ASCII->GetString(receivedData, 0, bytes));
sock->Close();
...

Функция BuildHeader с помощью метода POST протокола передачи гипертекстовых файлов HTTP формирует стандартный запрос, дополненный заголовком SOAPAction.

StringBuilder *sb = new StringBuilder(1024);
sb->Append( // Добавить в конец
"POST /SimpleWebService/Add.asmx HTTP/1.l\r\n") ;
sb->Append("Host: localhost\r\n"); // Добавить в конец
sb->Append( // Добавить в конец
"Content-Type: text/xml; charset=utf-8\r\n");
String *line = // Строка
String::Format("Content-Length: {0}\r\n", // Строка:: Формат
contentLength.ToString());
sb->Append(line); // Добавить в конец (строка)
sb->Append( // Добавить в конец
"SOAPAction: \"http://tempuri.org/Add\"\r\n") ;
sb->Append("\r\n");; // Добавить в конец
...

Функция BuildContent считывает в буфер содержимое файла и вычисляет размер буфера в байтах.

*contentLength = 0;
String *line; // Строка
while ((line = fileStream->ReadLine()) != 0)
{
sb->Append(line); // Добавляет в конец (строка)
sb->Append("\r\n"); // Добавляет в конец ("\r\n")
*contentLength += line->Length + 2;
// *contentLength + = строка-> Длина + 2;
}
fileStream->Close();

Данные в файле SoapAdd. txt представлены в SOAP-формате. Как и следовало ожидать, этот файл имеет вид, описанный выше. Входные параметры 9 и 3 представляются в соответствии со спецификацией WSDL.

<?xml version="l.О" encoding="utf-8"?>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Add xmlns="http://tempuri.org/">
<x>9</x>
<y>3</y>
</Add>
</soap:Body>
</soap:Envelope>

Сначала программа формирует запрос. Для этого используется метод POST протокола передачи гипертекстовых файлов HTTP. Запрос содержит стандартные заголовки протокола передачи гипертекстовых файлов HTTP и дополнительный заголовок SOAPAction. Затем запрос кодируется согласно спецификации SOAP. Вывод программы приведен ниже:

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

Затем программа записывает ответ. Ответ, снова-таки, начинается с заголовков протокола передачи гипертекстовых файлов HTTP. За ними следует возвращаемый результат, 12, закодированный в соответствии со спецификацией SOAP.

НТТР/1.1 200 ОК
Server: Microsoft-IIS/5 . О
Date: Tue, 30 Oct 2001 16:49:42 GMT
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 358
<?xml version="l.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XM LSchema">
<soap:Body>
<AddResponse xmlns="http://tempuri.org/">
<AddResult>12</AddResult>
</AddResponse>
</soap:Body>
</soap:Envelope>



Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
© faq.pp.ru, справочник программиста
Яндекс цитирования