SOAP (Простой протокол доступа к объектам) родился на свет в далеком 1998 году, с подачи людей работавших в то время в Microsoft. Вообще, на самом деле до этого у Microsoft уже был очень простой протокол, который назывался XML-RPC, но он показался слишком простым и потому на его базе и создали SOAP.
Изначально, предполагалось использовать SOAP для удаленного вызова процедур(RPC), Но последняя спецификация предполагает возможность обмена произвольными XML сообщениями. Теоретически в качестве транспорта может быть ипользован любой из протоколов прикладного уровня (SMTP, HTTP и т.д.), но на практике чаще всего используют HTTP/HTTPS.
Формат SOAP сообщения - XML, и помимо полезной с точки зрения бизнес логики информации о вызове, сообщение содержит еще кучу служебной информации, что собственно увеличивает размер сообщения и замедляет процесс передачи.
как только SOAP появился на свет, его сразу же придумали использовать в больших и сложных веб сервисах, которые базируются в числе прочего на WSDL (язык описания веб сервисов. основанный опять же таки на XML). по своей сути WSDL - это связующее звено между веб-сервисом и остальным окружающим миром, такой себе договор о том как именно можно с этим самым веб сервисом общаться.
Пока вроде все просто :) Смотрим в WSDL необходимого нам WEB сервиса, который конечжно же. написан на человекочитабельном XML, вооружаемся любимым C++, подтягиваем какой нибудь XML парсер и либу для работы с HTTP и вперед кодить.
Но беда в том, что человекочитабельный WSDL, для взрослых вебсервисов, обычно выглядит очень длинно и местами запутанно, и может уйти не один день, на то чтобы понять как именно с этим самым веб сервисом можно договорится. ну и кода пописать прийдется всетаки изрядно.
Собственно, на помощь в таком случае может прийти тулкит gSOAP. (Если конечно нам все еще хочется делать это на с++) GSOAP умеет генерировать с++ враперы читая WSDL, а также берет на себя транспортные расходы.
Это кросплатформенная штука, которая поддерживает работу на ( WinCE, Symbian, PalmOS, Windows, Linux, Unix, Mac OS X и т.д. ), причем можно скачать готовые бинари под конкретную платформу и не заморачиваться со сборкой. К его достоинствам, так же можно отнести то, что есть коммерческая лицензия, под которой ее можно использовать в коммерческих продуктах. Кроме того есть gSOAP Public License, которая разрешает коммерческое использование при условии отсылки авторам gSOAP модификаций gSOAP, сделанных при его использовании. Относительная стабильность, всетаки разработка ведется с 2001 года и за 10 лет успели там успели пофиксить немало багов (правда стоит заметить что при этом добавляли и новые) тулкит позволяет генерировать С или С++ код, и для последнего использовать или же не использовать STL Еще с помощью этой библиотеки можно быстро набросать Web сервис на С++, о чем есть замечательная статья на хабре.
для наших потребностей GSOAP предоставляет две утилиты: wsdl2h - позволяет сгенерировать си-подобное описание сервиса на основе wsdl. soapcpp2 - отвечает за преобразование того, что вышло из wsdl2h в код клиентского прокси ну или сервера если вам всетаки приходится создавать веб сервисы на с++.
Пример использования: скармливаем wsdl2h - wsdl файл и на один шаг становимся ближе к с++
далее, результат предыдущего шага отдаем soapcpp2 и на выходе получаем прокси-класс, через который собственно можно делать обращения к сервису, soapH.cpp и soapC.h код парсера сообщений soapStub заголовочная часть описывающая структуры данных используемые клиентом и сервером
по итогу остается добавить все что успешно нагенерилось + файлы ядра gsoap в наш проект и можно начинать общаться с Web сервисом