Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Onvif-无效的SOAP消息或SOAP版本不匹配_Delphi_Soap_Axis_Ws Security_Onvif - Fatal编程技术网

Delphi Onvif-无效的SOAP消息或SOAP版本不匹配

Delphi Onvif-无效的SOAP消息或SOAP版本不匹配,delphi,soap,axis,ws-security,onvif,Delphi,Soap,Axis,Ws Security,Onvif,我真的被Onvif身份验证弄糊涂了 我无法在AXIS和索尼相机上执行onvif命令 以下是生成请求的代码: procedure RebootDevice(dev: Device; Username, Password: string); var sdt: SystemDateTime; Created: string; Nonce: string; Nonce64: string; Password64: string; Header: Security; begin

我真的被Onvif身份验证弄糊涂了

我无法在AXIS和索尼相机上执行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;
过程重新启动设备(dev:Device;用户名、密码:string);
变量
sdt:SystemDateTime;
创建:字符串;
Nonce:字符串;
Nonce64:字符串;
密码64:字符串;
标题:安全;
开始
sdt:=dev.GetSystemDateAndTime;
已创建:=SystemDateTimeToStr(sdt.UTCDateTime);//yyyy-MM-ddTHH.MM.ss.000Z
Nonce:=“1234”;
Nonce64:=base64编码(Nonce);
Password64:=Base64Encode(HashSHA1(Nonce+Created+Password));
Header.UsernameToken.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:=已创建;
设置标题(标题)
dev.SystemReboot;// 故障排除提示:

  • 首先,尝试使用SoapUI之类的工具访问服务,并验证它是否发送了预期的响应
  • 比较SoapUI和Delphi的请求(头和体)

  • 使用Fiddler或Wireshark捕获HTTP流量,并比较Delphi/OnvifDM请求

实际上无法使用SapUI,因为需要与ip摄像头同步时间。OnvifDM成功连接并执行该命令。SOAP-ENV应为“”用户名元素应以NS1作为前缀,创建的元素应为“”名称空间,仅此而已。所有问题都在简短的评论中得到了解决。谢谢你,安德烈。
<?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>