我在写肥皂客户端。我使用的是gSOAP版本2.7.17,我必须坚持该版本,因为服务器正在使用这个版本,而且我不能修改它,因为它已经在这个领域中运行了。
当我做我的肥皂电话,我总是收到空的答复!然而,当我嗅探网络时,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>下面是一个关于如何使用soapcpp2生成的代理执行SOAP调用的简化代码片段
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的“定义”以使事情正常工作.
发布于 2013-01-24 11:15:19
查看您的代码,您可以声明response,然后将其元素引用为response.dResponse。这似乎意味着响应是一个结构,而不是指向一个结构的指针,所以在您调用m_soapProxy->unitCall之后,您报告的response版本并没有改变,只有m_soapProxy->unitCall中的副本才会改变。
我尝试在调试器中跟踪这个调用,看看m_soapProxy->unitCall中到底发生了什么。顺便问一下,是由GSOAP编码还是生成的?
https://stackoverflow.com/questions/14484251
复制相似问题