1

我有一个使用 gSoap 的 C++ 客户端。当它使用 2.8.8 版本的 gSoap 时,它运行良好。升级到 2.8.16 后它停止工作。似乎问题如下:我们缺少肥皂信封。旧版本发送:

<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:ns1="urn:attachmentSoapServer"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<data here>
</SOAP-ENV:Body></SOAP-ENV:Envelope>

新版本仅发送:

<data here>

如何像旧版本一样添加肥皂标题?

代码是这样的:

struct soap soap;    
soap_init(&soap);

soap_call_here(...);
4

2 回答 2

0

命名空间不应该在XXXBinding.h中定义,它是由 soapcpp2.exe 自动生成的,如下所示?或者必须在您的代码中进行更改。

    MyServiceSoap12Binding()
    { 
        soap = soap_new(); 
        if (soap && !soap->namespaces) 
        {
            static const struct Namespace namespaces[] = 
            {
                {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
                {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
                {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
                {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
                //...
                {NULL, NULL, NULL, NULL}
            };
        soap->namespaces = namespaces;
        }
    }
于 2013-09-27T08:43:19.210 回答
0

请检查 wsdl2h 警告消息和生成的 .h 接口文件。

为确保 SOAP 传输,生成的 .h 文件应具有:

//gsoap ns1 service transport: http://schemas.xmlsoap.org/soap/http

并且对于每个服务操作,我们期望如下:

//gsoap ns1 service method-protocol:   method SOAP

如果方法协议是 HTTP(或 POST、GET、PUT),则将使用不带 SOAP 信封和不带 SOAP 主体的 REST。

于 2016-02-02T19:14:07.390 回答