gSOAP empty answer
gSOAP empty answer
我正在编写一个 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>
下面是一个简化的代码片段,介绍如何使用 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"定义"以使事情正常工作......
查看您的代码,您声明response
,然后将其元素引用为 response.dResponse
。 这似乎意味着响应是一个结构而不是指向结构的指针,因此在您调用m_soapProxy->unitCall
后,您随后报告的response
版本没有更改,只有m_soapProxy->unitCall
中的副本会更改。
我会尝试在调试器中跟踪此调用,看看m_soapProxy->unitCall
中实际发生了什么。 顺便说一句,是你编码还是由 GSOAP 生成?
相关文章:
- 为什么"(!v.empty())"比"(v.size() >0)"好?
- DirectX11 IASetVertexBuffers with nullptrs or empty buffers
- 为什么C++标准库容器函数 empty() 标记为 [[nodiscard]]?
- list::empty() 多线程行为?
- Qt3D:"Mesh is empty, nothing to load"消息
- 使用迭代器成员函数是否仅适用于某些向量类型"empty()"?
- "Empty base optimization" lambda 捕获 - 标准禁止?为什么?
- QTcpSocket::readAll() is empty
- 在从 std::vector 移动的上调用 .clear()、.shrink_to_fit()、.empty() 是否合
- 获取所有 FPU 寄存器的值,甚至"empty"个寄存器的值
- QJsonValue gets empty
- Got empty Qt
- 请求使用 .empty 或 .size 的非类类型的成员
- std::size 和 std::empty 的专业化与模板不匹配
- 断言失败 (!ssize.empty()) in remapBilinear.
- 为什么string.empty()在字符串包含一个值时评估为true
- vector.size()= 0和vector.empty()之间是否有区别
- C++11:std::locale::empty() 甚至是一个东西
- std::find on empty vector 是否会导致未定义的行为
- gSOAP empty answer