首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gSOAP空答案

gSOAP空答案
EN

Stack Overflow用户
提问于 2013-01-23 16:17:45
回答 1查看 660关注 0票数 0

我在写肥皂客户端。我使用的是gSOAP版本2.7.17,我必须坚持该版本,因为服务器正在使用这个版本,而且我不能修改它,因为它已经在这个领域中运行了。

当我做我的肥皂电话,我总是收到空的答复!然而,当我嗅探网络时,XML答案似乎是正确的:

代码语言:javascript
复制
<?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调用的简化代码片段

代码语言:javascript
复制
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;

实际产出:

代码语言:javascript
复制
SOAP call done to , SOAP code 0, central code 0

当我期待

代码语言:javascript
复制
SOAP call done to UMS_DEV_LANCC2 (2), SOAP code 0, central code 5
/* 5 ->  cUNITRETURNCODE_RESTARTIMMEDIATE */

以前有一个旧的实现在工作,这一定是有效的!我哪里错了?有没有人遇到过这样的问题?任何指针都会受到强烈的赞赏!

编辑:

通过使用SOAP的早期版本(2.7.14),问题得到了“解决”,而无需更改我的程序的原始版本中的一行代码。然而,我有种感觉,我又错过了一些重要的事情!我可能应该稍微修改一下我的头文件,给出SOAP的“定义”以使事情正常工作.

EN

回答 1

Stack Overflow用户

发布于 2013-01-24 11:15:19

查看您的代码,您可以声明response,然后将其元素引用为response.dResponse。这似乎意味着响应是一个结构,而不是指向一个结构的指针,所以在您调用m_soapProxy->unitCall之后,您报告的response版本并没有改变,只有m_soapProxy->unitCall中的副本才会改变。

我尝试在调试器中跟踪这个调用,看看m_soapProxy->unitCall中到底发生了什么。顺便问一下,是由GSOAP编码还是生成的?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14484251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档