gSOAP пустой ответ

Я пишу SOAP-клиент. Я использую gSOAP версии 2.7.17, и я должен придерживаться этой версии, поскольку сервер использует эту версию, и я не могу изменить ее, так как она уже работает в поле.

Когда я делаю мой вызов SOAP, я всегда получаю пустой ответ! Однако, когда я нюхаю сеть, ответ XML кажется правильным:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:Supervisor="urn:Supervisor"xmlns:ActiveLogin="urn:ActiveLogin" xmlns:TechLogin="urn:TechLogin"xmlns:UMSLogin="urn:UMSLogin">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<unitCallResponse>
<szServerName>UMS_DEV_LANCC2 (2)</szServerName>
<dResponse>cUNITRETURNCODE_RESTARTIMMEDIATE</dResponse>
<dDetail>cBla</dDetail>
</unitCallResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Вот упрощенный фрагмент кода о том, как я выполняю вызов SOAP с прокси, сгенерированным с soapcpp2:

UMSLogin::unitCallResponse response;    // Response from SOAP
UMSLogin::UMSLoginProxy* m_soapProxy =  // The SOAP proxy
new UMSLogin::UMSLoginProxy(SOAP_IO_KEEPALIVE, SOAP_IO_KEEPALIVE);

callRes = m_soapProxy->unitCall(m_eUnitType, serial, m_dInterfaceVersion,
xl2CallTypeToUmsLoginCallType(m_pSoapEndPoint->getCallType()),
xl2CommTypeToUmsLoginCommType(m_pSoapEndPoint->getComType()),
response);

logDebug(LOG_COM_DEVICE, "SOAP call done to %s, SOAP code %i, central code %i",
response.szServerName.c_str(), callRes, response.dResponse);

m_soapProxy->soap_close_socket();
m_soapProxy->destroy();
delete m_soapProxy;

Фактический вывод:

SOAP call done to , SOAP code 0, central code 0

Когда я ожидаю

SOAP call done to UMS_DEV_LANCC2 (2), SOAP code 0, central code 5
/* 5 ->  cUNITRETURNCODE_RESTARTIMMEDIATE */

Была старая реализация, которая работала ранее, это должно работать! Где я не прав? У кого-нибудь уже была такая проблема? Любой указатель высоко ценится!

РЕДАКТИРОВАТЬ:

Проблема была «решена» с помощью более ранней версии SOAP (2.7.14) без изменения одной строки кода из исходной версии моей программы. Тем не менее, я чувствую, что снова упускаю что-то важное! Я, вероятно, должен немного подправить мой заголовочный файл, давая SOAP-определения, чтобы все заработало …

0

Решение

Глядя на свой код вы объявляете response а затем ссылаться на элементы этого как response.dResponse, Кажется, это подразумевает, что ответ является структурой, а не указателем на структуру, поэтому после вызова m_soapProxy->unitCall версия response то, о чем вы затем сообщаете, не изменилось, только копия в m_soapProxy->unitCall будет изменен

Я бы попробовал отследить этот вызов в отладчике и посмотреть, что на самом деле происходит в m_soapProxy->unitCall, Кстати, это ваш код или сгенерированный GSOAP?

0

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

Других решений пока нет …