2012-07-25 105 views
0

我真的被Onvif認證困惑。Onvif - 無效的SOAP消息或SOAP版本不匹配

我無法在AXIS和SONY相機上執行onvif命令。

這裏是代碼生成的請求:

procedure RebootDevice(dev: Device; Username, Password: string); 
var 
    sdt: SystemDateTime; 
    Created: string; 
    Nonce: string; 
    Nonce64: string; 
    Password64: string; 
    Header: Security; 
begin 
    sdt := dev.GetSystemDateAndTime; 
    Created := SystemDateTimeToStr(sdt.UTCDateTime); // yyyy-MM-ddTHH.mm.ss.000Z 
    Nonce := '1234'; 
    Nonce64 := Base64Encode(Nonce); 
    Password64 := Base64Encode(HashSHA1(Nonce+Created+Password)); 
    Header.UsernameToken.Username := Username; 
    Header.UsernameToken.Password.Type := 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest'; 
    Header.UsernameToken.Password.Text := Password64; 
    Header.UsernameToken.Nonce.EncodingType := 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary'; 
    Header.UsernameToken.Nonce.Text := Nonce64; 
    Header.UsernameToken.Created := Created; 
    SetHeader(Header) 
    dev.SystemReboot; // <---- Error in here 
end; 

生成的SOAP XML:

<?xml version="1.0"?> 
<SOAP-ENV:Envelope 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Header 
     SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
     xmlns:NS1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <NS1:Security 
      SOAP-ENV:mustUnderstand="1"> 
      <NS1:UsernameToken> 
       <Username> 
        admin 
       </Username> 
       <NS1:Password 
        Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"> 
        +sWiewkgfkjFqzW2O5cuGJr9SiE= 
       </NS1:Password> 
       <NS1:Nonce 
        EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"> 
        MTIzNA== 
       </NS1:Nonce> 
       <Created> 
        2004-01-03T08:20:09.000Z 
       </Created> 
      </NS1:UsernameToken> 
     </NS1:Security> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body 
     xmlns:NS2="http://www.onvif.org/ver10/device/wsdl" 
     SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
     <NS2:SystemReboot/> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

這是響應:

<?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: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> 

你能告訴馬是什麼出錯了。

謝謝

+2

SOAP-ENV應爲 「http://www.w3.org/2003/05/soap-envelope」 用戶名元素應以前綴NS1, 創建元素應在「http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd」命名空間 – 2012-07-26 23:10:47

+0

哇,這就是它。所有問題都在一個簡短的評論中得到解決。謝謝安德烈。 – 2012-07-27 09:40:37

回答

1

故障排除提示:

  • 首先,嘗試與像了SoapUI工具來訪問服務並驗證其發送的預期響應
  • 比較請求(標題和正文)了SoapUI和Delphi

或者

  • 捕捉提琴手或Wireshark的HTTP流量,並比較了德爾福/ OnvifDM請求
+0

其實SapUI無法使用,因爲時間需要與ip-camera同步。 OnvifDM成功連接並執行該命令。 – 2012-07-25 10:00:07