首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无效的SOAP消息或SOAP版本不匹配

无效的SOAP消息或SOAP版本不匹配
EN

Stack Overflow用户
提问于 2015-07-27 18:49:04
回答 2查看 36.5K关注 0票数 2

我正在使用SOA客户端Firefox插件向一些ONVIF摄像头发送SOAP请求。下面您将看到对“GetServices”请求的请求。它对一个摄像机很好,但是对于另一个(轴摄像机),我得到了一个错误:“无效的SOAP消息或SOAP版本错配”。

关于这个问题还有其他的问题。但所有的答案我都不清楚。其中一个提到更改为SOAPVersion1.2(我如何做到这一点?)这个问题似乎是通过一个简短的评论来解决的:Onvif - Invalid SOAP message or SOAP version mismatch,如果有人认为它与我的案子有关,你能请你详述一下吗?

代码语言:javascript
复制
URL = http://10.253.253.2/onvif/device_service
Method = POST

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
xmlns:ns0="http://www.onvif.org/ver10/device/wsdl" 
xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
    <wsse:Security mustUnderstand="true">
        <wsse:UsernameToken>
            <wsse:Username>admin</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">sLOOZG8o+369zaBclGwn4+tjOac=</wsse:Password>
            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">NWQyMzVjNGNhYmIxMTQ1ZjEzZWVlYzcyZDkzZjcwODI=</wsse:Nonce>
            <wsu:Created>2015-07-27T15:47:31.178534Z</wsu:Created>
        </wsse:UsernameToken>
    </wsse:Security>
</SOAP-ENV:Header>
<ns1:Body>
    <ns0:GetServices>
        <ns0:IncludeCapability>false</ns0:IncludeCapability>
    </ns0:GetServices>
</ns1:Body>
</SOAP-ENV:Envelope>

错误反应..。

代码语言: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:c14n="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsa5="http://www.w3.org/2005/08/addressing" xmlns:xmime="http://tempuri.org/xmime.xsd" xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:wsrfbf="http://docs.oasis-open.org/wsrf/bf-2" xmlns:wstop="http://docs.oasis-open.org/wsn/t-1" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:wsrfr="http://docs.oasis-open.org/wsrf/r-2" xmlns:aa="http://www.axis.com/vapix/ws/action1" xmlns:aev="http://www.axis.com/vapix/ws/event1" xmlns:ali1="http://www.axis.com/vapix/ws/light/CommonBinding" xmlns:ali2="http://www.axis.com/vapix/ws/light/IntensityBinding" xmlns:ali3="http://www.axis.com/vapix/ws/light/AngleOfIlluminationBinding" xmlns:ali4="http://www.axis.com/vapix/ws/light/DayNightSynchronizeBinding" xmlns:ali="http://www.axis.com/vapix/ws/light" xmlns:tan1="http://www.onvif.org/ver20/analytics/wsdl/RuleEngineBinding" xmlns:tan2="http://www.onvif.org/ver20/analytics/wsdl/AnalyticsEngineBinding" xmlns:tan="http://www.onvif.org/ver20/analytics/wsdl" xmlns:tds="http://www.onvif.org/ver10/device/wsdl" xmlns:tev1="http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding" xmlns:tev2="http://www.onvif.org/ver10/events/wsdl/EventBinding" xmlns:tev3="http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:tev4="http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding" xmlns:tev="http://www.onvif.org/ver10/events/wsdl" xmlns:timg="http://www.onvif.org/ver20/imaging/wsdl" xmlns:tptz="http://www.onvif.org/ver20/ptz/wsdl" xmlns:trt="http://www.onvif.org/ver10/media/wsdl" xmlns:ter="http://www.onvif.org/ver10/error" xmlns:tns1="http://www.onvif.org/ver10/topics" xmlns:tnsaxis="http://www.axis.com/2009/event/topics">
<SOAP-ENV:Body>
    <SOAP-ENV:Fault SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Code>
        <SOAP-ENV:Value>env:VersionMismatch</SOAP-ENV:Value>
    </SOAP-ENV:Code>
    <SOAP-ENV:Reason>
        <SOAP-ENV:Text xml:lang="en">SOAP version mismatch</SOAP-ENV:Text>
    </SOAP-ENV:Reason>
    <SOAP-ENV:Detail>
        <SOAP-ENV:Text>Invalid SOAP message or SOAP version mismatch</SOAP-ENV:Text>
    </SOAP-ENV:Detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

更新

此后,我发现要更改为SOAPv1.2,需要使用http://www.w3.org/2003/05/soap-envelope而不是http://schemas.xmlsoap.org/soap/envelop。我试过了(在上面的代码中有两个替代品),但是在任何一个摄像机中都不能工作。我看不出我做错了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-30 09:56:10

好的算出来了。轴相机需要SOAPv1.2。不同版本之间的区别是:xmlns的名称空间url :SOAP;http标头中的内容类型和操作。

ONVIF使用SOAP v1.1 ..。

代码语言:javascript
复制
    url = http://10.253.253.159/onvif/device_service

    Method = POST

    http header = Content-Type: text/xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime";

    <SOAP-ENV:Envelope 
                xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
                xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
                xmlns:wsdl="http://www.onvif.org/ver10/device/wsdl"
                xmlns:sch="http://www.onvif.org/ver10/schema"
         >
        <SOAP-ENV:Header>
            <wsse:Security mustUnderstand="true">
                <wsse:UsernameToken>
                    <wsse:Username>admin</wsse:Username>
                    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0">admin</wsse:Password>
                    <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">NWQyMzVjNGNhYmIxMTQ1ZjEzZWVlYzcyZDkzZjcwODI=</wsse:Nonce>
                    <wsu:Created>2015-07-27T15:47:31.178534Z</wsu:Created>
                </wsse:UsernameToken>
            </wsse:Security>
        </SOAP-ENV:Header>
        <SOAP-ENV:Body>              
            <wsdl:GetSystemDateAndTime/> 
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

ONVIF使用SOAP v1.2 ..。

代码语言:javascript
复制
    url = http://10.253.253.159/onvif/device_service

    Method = POST

    http header = Content-Type: application/soap+xml; charset=utf-8;  

    <SOAP-ENV:Envelope 
                xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
                xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
                xmlns:wsdl="http://www.onvif.org/ver10/device/wsdl"
                xmlns:sch="http://www.onvif.org/ver10/schema"
         >
        <SOAP-ENV:Header>
            <wsse:Security mustUnderstand="true">
                <wsse:UsernameToken>
                    <wsse:Username>admin</wsse:Username>
                    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0">admin</wsse:Password>
                    <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">NWQyMzVjNGNhYmIxMTQ1ZjEzZWVlYzcyZDkzZjcwODI=</wsse:Nonce>
                    <wsu:Created>2015-07-27T15:47:31.178534Z</wsu:Created>
                </wsse:UsernameToken>
            </wsse:Security>                
        </SOAP-ENV:Header>
        <SOAP-ENV:Body>              
            <wsdl:GetSystemDateAndTime/>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
票数 4
EN

Stack Overflow用户

发布于 2020-10-29 15:16:34

@spiderplant0 0给出了直截了当的答案。在我的例子中,我有一个SoapUI项目,我试图调用一个SOAP1.2端点。我在这个项目中配置了specifically,并且在签名步骤中使用了错误的名称空间"http://schemas.xmlsoap.org/soap/envelope/“,特别是在主体部分。由于这种错误配置,端点一直告诉我,它“无法验证请求:安全处理失败(操作不匹配)”,这对我来说没有任何意义,因为WS-Security步骤是按照正确的顺序进行的。

我用正确的名称空间"http://www.w3.org/2003/05/soap-envelope"“替换了错误的名称空间,它成功了!

感谢@spiderplant0 0指出这一点!

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

https://stackoverflow.com/questions/31660958

复制
相关文章

相似问题

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