Клиентская библиотека веб-сервиса для C ++ - PullRequest
5 голосов
/ 01 февраля 2012

Я бы хотел реализовать клиент веб-сервиса для проекта в Windows. Я хочу получить информацию о веб-сервисе, запрос мыла и ответ мыла. Мне нужна библиотека C ++, которую я могу использовать для этих целей (не wsdlpull).

Требования

  • должна быть библиотекой C ++
  • может использоваться для доступа к любой веб-службе SOAP (поэтому я могу передать URL-адрес, имя веб-службы, метод веб-службы и все аргументы в качестве аргументов вызова функции)
  • может запросить у веб-службы его WSDL и вернуть мне доступные имена методов, аргументы методов и их типы данных
  • простая документация

Чтобы быть более конкретным: библиотека должна иметь простые вызовы, подобные этой, для получения информации о веб-сервисе

invoker.getOperations(operations);

outputXml += "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
outputXml += "<webService";
outputXml += " name=\"" + GetServiceName(&invoker) + "\"";
outputXml += ">\n";
outputXml += "\t<webMethods>\n";

Спасибо.

1 Ответ

7 голосов
/ 02 февраля 2012

Промышленным стандартом для веб-сервисов C / C ++ является gsoap. http://www.cs.fsu.edu/~engelen/soap.html

Обеспечивает отображение XML-схемы на C / C ++ с помощью wsdl2h. Имеет хорошую документацию и множество образцов в упаковке. Документ можно найти также онлайн . Вы можете легко перенести свой код во многие ОС (Linux, Windows и т. Д.)

Пример Simpe для добавления к номеру через веб-сервис (код вызова)

#include "soapH.h"
#include "calc.nsmap"
main()
{
   struct soap *soap = soap_new();
   double result;
   if (soap_call_ns__add(soap, 1.0, 2.0, &result) == SOAP_OK)
      printf("The sum of 1.0 and 2.0 is %lg\n", result);
   else
      soap_print_fault(soap, stderr);
   soap_end(soap);
   soap_free(soap);
}

С помощью gsoap вы выполняете работу в два этапа

  1. Сначала создайте заглушки (например, wsdl2java) из WSDL
  2. Тогда вы называете заглушки своими объектами

Также отличная структура, если вы хотите создать свой сервис (выступать в роли сервера, а не только клиентский код)

...