无效的SOAP消息或SOAP版本不匹配
我正在使用SOA客户端Firefox插件向一些ONVIF摄像头发送SOAP请求。下面您将看到对“GetServices”请求的请求。对于一个摄像头,它可以正常工作,但是对于另一个摄像头(AXIS摄像头),我得到了错误:“无效的SOAP消息或SOAP版本不匹配” 关于这一点还有其他问题。但没有一个答案对我来说是清楚的。其中一个提到了更改为soap版本1.2(我如何做到这一点?)。这个问题似乎可以通过一个简短的评论来解决: 如果有人认为这与我的案子有关,你能详细说明一下吗无效的SOAP消息或SOAP版本不匹配,soap,Soap,我正在使用SOA客户端Firefox插件向一些ONVIF摄像头发送SOAP请求。下面您将看到对“GetServices”请求的请求。对于一个摄像头,它可以正常工作,但是对于另一个摄像头(AXIS摄像头),我得到了错误:“无效的SOAP消息或SOAP版本不匹配” 关于这一点还有其他问题。但没有一个答案对我来说是清楚的。其中一个提到了更改为soap版本1.2(我如何做到这一点?)。这个问题似乎可以通过一个简短的评论来解决: 如果有人认为这与我的案子有关,你能详细说明一下吗 URL = http://
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>
URL=http://10.253.253.2/onvif/device_service
方法=员额
管理
sLOOZG8o+369zaBclGwn4+tjOac=
NWQYMZVJGNHYMIXMTQ1ZJEZZWVLYZYZDKZZJCWODI=
2015-07-27T15:47:31.178534Z
错误的
错误响应
<?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>
环境:版本匹配
SOAP版本不匹配
无效的SOAP消息或SOAP版本不匹配
更新
我后来发现,要更改为SOAPV1.2,您需要使用
http://www.w3.org/2003/05/soap-envelope
而不是http://schemas.xmlsoap.org/soap/envelop
。
我试过了(上面代码中有两个替换),但在两个摄像头中都不起作用。我看不出我做错了什么。好的,我知道了。axis相机需要SOAP v1.2。两个版本之间的区别是:xmlns的名称空间url:SOAP-ENV;http标头中的内容类型和操作 ONVIF使用SOAP v1.1
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>
url=http://10.253.253.159/onvif/device_service
方法=员额
http头=内容类型:text/xml;字符集=utf-8;行动=”http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime";
管理
管理
NWQYMZVJGNHYMIXMTQ1ZJEZZWVLYZYZDKZZJCWODI=
2015-07-27T15:47:31.178534Z
ONVIF使用SOAP v1.2
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>
url=http://10.253.253.159/onvif/device_service
方法=员额
http头=内容类型:应用程序/soap+xml;字符集=utf-8;
管理
管理
NWQYMZVJGNHYMIXMTQ1ZJEZZWVLYZYZDKZZJCWODI=
2015-07-27T15:47:31.178534Z
好的,我知道了。axis相机需要SOAP v1.2。两个版本之间的区别是:xmlns的名称空间url:SOAP-ENV;http标头中的内容类型和操作
ONVIF使用SOAP v1.1
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>
url=http://10.253.253.159/onvif/device_service
方法=员额
http头=内容类型:text/xml;字符集=utf-8;行动=”http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime";
管理
管理
NWQYMZVJGNHYMIXMTQ1ZJEZZWVLYZYZDKZZJCWODI=
2015-07-27T15:47:31.178534Z
ONVIF使用SOAP v1.2
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>
url=http://10.253.253.159/onvif/device_service
方法=员额
http头=内容类型:应用程序/soap+xml;字符集=utf-8;
管理
管理
NWQYMZVJGNHYMIXMTQ1ZJEZZWVLYZYZDKZZJCWODI=
2015-07-27T15:47:31.178534Z
@spiderplant0给出了正确的答案。在我的例子中,我有一个SoapUI项目,我试图调用SOAP1.2端点。我将WS-Security配置到此项目中,但使用了错误的命名空间“http://schemas.xmlsoap.org/soap/envelope/“在签名步骤中,特别是在身体部位。由于这种错误配置,端点一直告诉我它“无法验证请求:安全处理失败(操作不匹配)”,这对我来说没有意义,因为WS-security步骤的顺序是正确的
我用正确的名称空间替换了错误的名称空间“http://www.w3.org/2003/05/soap-envelope“,它成功了
感谢@spiderplant0指出这一点 @spiderplant0给出了正确的答案。在我的例子中,我有一个SoapUI项目,我试图调用SOAP1.2端点。我将WS-Security配置到此项目中,但使用了错误的命名空间“http://schemas.xmlsoap.org/soap/envelope/“在签名步骤中,特别是在身体部位。由于这种错误配置,端点一直告诉我它“无法验证请求:安全处理失败(操作不匹配)”,这对我来说没有意义,因为WS-security步骤的顺序是正确的 我用正确的名称空间替换了错误的名称空间“http://www.w3.org/2003/05/soap-envelope“,它成功了
感谢@spiderplant0指出这一点 我正在使用SoapUI发送soap请求。我将把“http头=内容类型:application/soap+xml;charset=utf-8”放在哪里;我正在使用SoapUI发送soap请求。我将把“http头=内容类型:application/soap+xml;charset=utf-8