如何在肥皂响应中添加标签
how to add tag in soap response
使用 gsoap 我已经生成了服务器 C++ 代码。
我使用 SoapUI 向服务器发送消息并获得响应。直到这里一切都很好。
我想在回复中添加更多标签。为此,我操纵了服务器代码。最初由 gsoap 生成的产生响应的代码是:
if (soap_end_count(soap)
|| soap_response(soap, SOAP_OK)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| tempuri__IsAliveResponse.soap_put(soap, "tempuri:IsAliveResponse", "")
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap->error;
这给了我以下回复:
<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:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tempuri="http://tempuri.org/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<tempuri:IsAliveResponse/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但是当我想在响应中添加更多标签时:
if (soap_end_count(soap)
|| soap_response(soap, SOAP_OK)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| tempuri__IsAliveResponse.soap_put(soap, "tempuri:IsAliveResponse", "")
|| tempuri__IsAliveResponse.soap_put(soap, "newTag", "")
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap->error;
然后我剪了,部分回复:
<?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:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tempuri="http://tempuri.org/">
<SOAP-ENV:Header></SOAP-ENV:Header>
<SOAP-ENV:Body>
<tempuri:IsAliveResponse></tempuri:IsAliveResponse>
<newTag></newTag>
</SOAP-ENV:Body>
</
然后我发现 Content-Length: 总是 524。此外,我添加的每个字符都算作 2.
我没看到这个固定的524长度是从哪里决定的。它来自缓冲区大小吗?如果是这样,我如何生成具有更大缓冲区大小的代码?
如何在 gsoap 生成的 C++ soap 服务器代码中添加更多关于响应的数据?
向响应中添加更多参数标签很容易。只需编辑接口 .h 文件(由 wsdl2h 生成)。此文件有一个 tempuri__IsAliveResponse
class。向此 class 添加更多成员以添加您想要的响应参数。然后让 soapcpp2 生成带有附加参数的新源代码。这些标签将出现在 IsAliveResponse
标签中。
要创建包含多个未嵌套在 IsAliveResponse
中的标签的响应,请定义一个带有两个前导下划线的 class 以使 class "invisible"序列化程序,例如 class __tempuri__MyResponse
。然后添加成员 tempuri__IsAliveResponse tempuri__IsAliveResponse_
(注意这里的结尾 _
以避免名称冲突)和您想要作为标签的其他成员。使用新的 class __tempuri__MyResponse
作为服务操作的响应类型。
使用 gsoap 我已经生成了服务器 C++ 代码。
我使用 SoapUI 向服务器发送消息并获得响应。直到这里一切都很好。
我想在回复中添加更多标签。为此,我操纵了服务器代码。最初由 gsoap 生成的产生响应的代码是:
if (soap_end_count(soap)
|| soap_response(soap, SOAP_OK)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| tempuri__IsAliveResponse.soap_put(soap, "tempuri:IsAliveResponse", "")
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap->error;
这给了我以下回复:
<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:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tempuri="http://tempuri.org/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<tempuri:IsAliveResponse/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但是当我想在响应中添加更多标签时:
if (soap_end_count(soap)
|| soap_response(soap, SOAP_OK)
|| soap_envelope_begin_out(soap)
|| soap_putheader(soap)
|| soap_body_begin_out(soap)
|| tempuri__IsAliveResponse.soap_put(soap, "tempuri:IsAliveResponse", "")
|| tempuri__IsAliveResponse.soap_put(soap, "newTag", "")
|| soap_body_end_out(soap)
|| soap_envelope_end_out(soap)
|| soap_end_send(soap))
return soap->error;
然后我剪了,部分回复:
<?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:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tempuri="http://tempuri.org/">
<SOAP-ENV:Header></SOAP-ENV:Header>
<SOAP-ENV:Body>
<tempuri:IsAliveResponse></tempuri:IsAliveResponse>
<newTag></newTag>
</SOAP-ENV:Body>
</
然后我发现 Content-Length: 总是 524。此外,我添加的每个字符都算作 2.
我没看到这个固定的524长度是从哪里决定的。它来自缓冲区大小吗?如果是这样,我如何生成具有更大缓冲区大小的代码?
如何在 gsoap 生成的 C++ soap 服务器代码中添加更多关于响应的数据?
向响应中添加更多参数标签很容易。只需编辑接口 .h 文件(由 wsdl2h 生成)。此文件有一个 tempuri__IsAliveResponse
class。向此 class 添加更多成员以添加您想要的响应参数。然后让 soapcpp2 生成带有附加参数的新源代码。这些标签将出现在 IsAliveResponse
标签中。
要创建包含多个未嵌套在 IsAliveResponse
中的标签的响应,请定义一个带有两个前导下划线的 class 以使 class "invisible"序列化程序,例如 class __tempuri__MyResponse
。然后添加成员 tempuri__IsAliveResponse tempuri__IsAliveResponse_
(注意这里的结尾 _
以避免名称冲突)和您想要作为标签的其他成员。使用新的 class __tempuri__MyResponse
作为服务操作的响应类型。