SOAP & amp; WS-адресация с использованием gsoap

Для проекта мне нужно использовать сервис WCF (не создан мной).
Я создал соответствующие классы, используя набор инструментов gSoap, и все работало отлично!

Так продолжалось до тех пор, пока разработчик сервиса не решил обновить его и потребовать WS-Addressing!

Я протестировал сервис с помощью инструмента soapUI, и для получения ответа мне нужно проверить опцию «добавить wsa: Кому по умолчанию» в WS-A.

Я предполагаю, что мне нужно сделать что-то подобное в моем коде. Я читал об использовании плагина wsa, но не смог найти достаточных инструкций. Что я сделал до сих пор:

я использовал wsdl2h -o outfile.h url_to_service -t typemap.dat

и в typemap.dat я положил:

SOAP_ENV__Header =\
#import "wsa.h"\n\
struct SOAP_ENV__Header\n\
{\n\
mustUnderstand _wsa__MessageID    wsa__MessageID 0;\n\
mustUnderstand _wsa__RelatesTo *  wsa__RelatesTo 0;\n\
mustUnderstand _wsa__From *       wsa__From      0;\n\
mustUnderstand _wsa__ReplyTo *    wsa__ReplyTo   0;\n\
mustUnderstand _wsa__FaultTo *    wsa__FaultTo   0;\n\
mustUnderstand _wsa__To           wsa__To        0;\n\
mustUnderstand _wsa__Action       wsa__Action    0;\n\
};

при использовании инструмента soapcpp2 я получаю сообщение об ошибке:

wsa5.h (288): ОШИБКА: удаленное столкновение с именем метода: struct / class ‘SOAP_ENV__Fault’
уже объявлено в строке 274

Наконец, когда я пытаюсь вызвать сервисные методы из моего кода (C ++, ничего не меняя по сравнению с предыдущей версией, где WS-A не требовался), программа зависает, и я вижу увеличение используемой памяти до точки (~ 700 МБ) , затем сбросьте и программа останется замороженной!

Я использую Windows, VS2010 и gSoap 2.8.17.
Может кто-нибудь указать мне правильное направление о том, как добавить WSA?

Заранее спасибо!

0

Решение

Я предполагаю, что вы смешиваете несколько выпусков WS-Addressing:

В gSOAP typemap.dat мы могли видеть:

wsa = <http://schemas.xmlsoap.org/ws/2004/08/addressing>
wsa3 = <http://schemas.xmlsoap.org/ws/2003/03/addressing>
wsa4 = <http://schemas.xmlsoap.org/ws/2004/03/addressing>
wsa5 = <http://www.w3.org/2005/08/addressing>

Если заголовок WS-Addressing определен в вашем wsdl, его определение будет выполнено без определения пользовательского заголовка в typemap.dat. Я думаю, что вы должны удалить определение SOAP_ENV__Header и добавить определение пространств имен wsa, управляемых плагинами wsa (если они отсутствуют).

Информацию об использовании плагина wsa вы найдете в документации по gSOAP. док / WSA / html / index.html и из образца плагина wsa Образцы / WSA / wsademo.c.

Убедитесь, что плагины gSOAP предоставляются в виде исходного файла, поэтому вам нужно будет скомпилировать и связать файл plugin / wsaapi.c.

0

Другие решения


По вопросам рекламы [email protected]