SOAP 클라이언트를 작성하고 있습니다. gSOAP 버전 2.7.17을 사용하고 있으며 서버가이 버전을 사용하고 있기 때문에 그 버전을 고수해야합니다. 이미이 필드에서 실행 중이므로 수정할 수 없습니다.gSOAP 빈 대답
SOAP 호출을 할 때 나는 항상 빈 응답을받습니다! 내가 네트워크를 도청 할 때 그러나 XML의 대답은 올바른 것 같다
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;
:
여기<?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>
내가 soapcpp2 생성 프록시와 SOAP 호출을 수행하는 방법에 대한 단순화 된 코드입니다 실제 출력 :
SOAP call done to , SOAP code 0, central code 0
내가
,536 기대SOAP call done to UMS_DEV_LANCC2 (2), SOAP code 0, central code 5
/* 5 -> cUNITRETURNCODE_RESTARTIMMEDIATE */
이전에 작동했던 이전 구현이 있었지만 이것이 작동하고 있어야합니다! 내가 어디서 잘못한거야? 이미 이런 종류의 문제가 있었습니까? 모든 포인터를 강력하게 감사드립니다!
EDIT :
문제는 내 프로그램의 원래 버전에서 한 줄의 코드 변경없이 SOAP (2.7.14)의 이전 버전을 사용하여 "해결"하였다. 그러나, 나는 다시 중요한 것을 놓친다는 느낌이 든다. 나는 아마도 SOAP "정의"를주는 작은 헤더 파일을 조정하여 작업을 수행해야한다. ...
조언을 해주셔서 감사하지만 "unitCall"에 대한 참조가 필요하므로 변수가 업데이트되므로 서명 -> UMSLoginProxy :: unitCall (..., unitCallResponse 및 response)을 참조하십시오. 디버거를 사용할 때 SOAP에 의해 생성 된 unitCall 메서드의 끝에서 임시 변수를 내 참조로 복사하고 이미이 시점에 응답이 비어 있습니다. – morandg