Visual c++ gSoap故障SOAP-ENV:MustUnderstand[无子代码]

Visual c++ gSoap故障SOAP-ENV:MustUnderstand[无子代码],visual-c++,soap,gsoap,onvif,Visual C++,Soap,Gsoap,Onvif,我正在使用gSoap为ONVIF摄像头构建一个web服务。 我已经使用ONVIF at提供的核心wdsl生成了头文件和源文件 但是,每次我从客户端发出请求时,我都会在函数soap\u begin\u serve(soap)中得到以下错误: 上面的错误是什么意思?我如何修复它 编辑:这是我在相机端收到的信息: POST / HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org

我正在使用gSoap为ONVIF摄像头构建一个web服务。 我已经使用ONVIF at提供的核心wdsl生成了头文件和源文件

但是,每次我从客户端发出请求时,我都会在函数
soap\u begin\u serve(soap)
中得到以下错误:

上面的错误是什么意思?我如何修复它

编辑:这是我在相机端收到的信息:

POST / HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime"
Host: localhost:8090
Content-Length: 261
Accept-Encoding: gzip, deflate
Connection: Close

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetSystemDateAndTime xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>POST / HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetScopes"
Host: localhost:8090
Content-Length: 905
Accept-Encoding: gzip, deflate
Connection: Close

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><UsernameToken><Username>admin</Username><Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">WFz21zL8rch8LRoxAPzgHRMBbr0=</Password><Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">9y79ka0xD02oCIw6GAoIPwEAAAAAAA==</Nonce><Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2017-05-21T08:15:58.902Z</Created></UsernameToken></Security></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetScopes xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>
POST/HTTP/1.1
内容类型:应用程序/soap+xml;字符集=utf-8;行动=”http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime"
主机:本地主机:8090
内容长度:261
接受编码:gzip,deflate
连接:关闭
POST/HTTP/1.1
内容类型:应用程序/soap+xml;字符集=utf-8;行动=”http://www.onvif.org/ver10/device/wsdl/GetScopes"
主机:本地主机:8090
内容长度:905
接受编码:gzip,deflate
连接:关闭
adminWFz21zL8rch8LRoxAPzgHRMBbr0=9y79ka0xd02ociw6gaoipweaaaaaa==2017-05-21T08:15:58.902Z
SOAP 1.2故障SOAP-ENV:MustUnderstand[无子代码] “必须理解元素“Security”中的数据,但不能对其进行处理”

这意味着您需要启用WS-Security以进行身份验证:

  • 添加
    #将“wsse.h”
    导入soapcpp2要处理的
    .h
    头文件(又称服务和数据绑定“接口文件”)

  • 在源代码中,包括“plugin/wsseapi.h”

  • 在源代码中,在发送请求之前使用
    soap\u wsse\u add\u UsernameTokenDigest(soap,NULL,“username”,“password”)提供用户凭据

  • 使用编译器标志
    -DWITH_OPENSSL
    编译源代码,并与
    plugin/wsseapi.c
    plugin/smdevp.c
    plugin/mecevp.c
    一起编译应用程序代码库(
    plugin
    目录位于gSOAP发行版路径中),当然还要编译
    stdsoap2.c
    stdsoap2.cpp
    和其他生成的文件

  • 链接OpenSSL
    -lssl-lcrypto
    ,如果需要压缩,还可以链接
    -lz

  • 当使用gSOAP(数字签名和/或加密)的完整WS-Security插件功能时,您应该使用编译器选项
    -DWITH_OPENSSL-DWITH_DOM-DWITH_GZIP
    编译所有的源代码
    ,并与代码一起编译
    DOM.c
    DOM.cpp

  • 另请参见gSOAP


    希望这有帮助。

    UsernameToken/Security标头中有问题。您可以将发送给摄像头的SOAP消息发布吗?发布了摄像头接收到的请求。谢谢。我必须单独配置gsoap以实现WS-Security吗?
    POST / HTTP/1.1
    Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime"
    Host: localhost:8090
    Content-Length: 261
    Accept-Encoding: gzip, deflate
    Connection: Close
    
    <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetSystemDateAndTime xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>POST / HTTP/1.1
    Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetScopes"
    Host: localhost:8090
    Content-Length: 905
    Accept-Encoding: gzip, deflate
    Connection: Close
    
    <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Header><Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><UsernameToken><Username>admin</Username><Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">WFz21zL8rch8LRoxAPzgHRMBbr0=</Password><Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">9y79ka0xD02oCIw6GAoIPwEAAAAAAA==</Nonce><Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2017-05-21T08:15:58.902Z</Created></UsernameToken></Security></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetScopes xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>