很多在做ONVIF的人用remotediscovery.wsdl + gsoap產生出soap的程式,但是~~~
若是用官方的頁面所發佈的remotediscovery.wsdl做出來的程式可以讓TestTool有反應的話,那我就得稱看官你不是人,而是神!
第一,它產生出來的欄位就不太符合[ws-discovery]文件所敘述的欄位。Ex:沒有ProbeMatches欄
第二,Test Tool也會去檢查這一個欄位。
所以,若根據官方發佈的remotediscovery.wsdl這個東東,大大們能得到正確的Discovery的話,真的是佩服的五體投地。
修正如下:
<wsdl:definitions
xmlns:dn="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wl="http://www.onvif.org/ver10/network/wsdl"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://schemas.xmlsoap.org/ws/2005/04/discovery">
<wsdl:types>
<xs:schema targetNamespace="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery"
elementFormDefault="qualified">
<xs:import namespace="http://schemas.xmlsoap.org/ws/2005/04/discovery"
schemaLocation="http://schemas.xmlsoap.org/ws/2005/04/discovery/ws-discovery.xsd%22/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="Hello" type="d:HelloType"/>
<xs:element name="HelloResponse" type="d:ResolveType"/>
<xs:element name="Probe" type="d:ProbeType"/>
<xs:element name="ProbeMatches" type="d:ProbeMatches"/>
<xs:element name="Bye" type="d:ByeType"/>
<xs:element name="ByeResponse" type="d:ResolveType"/>
<!--===============================-->
</xs:schema>
</wsdl:types>
<wsdl:message name="HelloRequest">
<wsdl:part name="parameters" element="dn:Hello"/>
</wsdl:message>
<wsdl:message name="HelloResponse">
<wsdl:part name="parameters" element="dn:HelloResponse"/>
</wsdl:message>
<wsdl:message name="ProbeRequest">
<wsdl:part name="parameters" element="dn:Probe"/>
</wsdl:message>
<wsdl:message name="ProbeMatches">
<wsdl:part name="parameters" element="dn:ProbeMatches"/>
</wsdl:message>
<wsdl:message name="ByeRequest">
<wsdl:part name="parameters" element="dn:Bye"/>
</wsdl:message>
<wsdl:message name="ByeResponse">
<wsdl:part name="parameters" element="dn:ByeResponse"/>
</wsdl:message>
<wsdl:portType name="RemoteDiscoveryPort">
<wsdl:operation name="Hello">
<wsdl:input message="dn:HelloRequest" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello%22/>
<wsdl:output message="dn:HelloResponse" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe%22/>
</wsdl:operation>
<wsdl:operation name="Bye">
<wsdl:input message="dn:ByeRequest" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Bye%22/>
<wsdl:output message="dn:ByeResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="DiscoveryLookupPort">
<wsdl:operation name="Probe">
<wsdl:input message="dn:ProbeRequest" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe%22/>
<wsdl:output message="dn:ProbeMatches" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches%22/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="RemoteDiscoveryBinding" type="dn:RemoteDiscoveryPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http%22/>
<wsdl:operation name="Hello">
<soap:operation soapAction="http://www.onvif.org/ver10/network/wsdl/Hello%22/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Bye">
<soap:operation soapAction="http://www.onvif.org/ver10/network/wsdl/Bye%22/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DiscoveryLookupBinding" type="dn:DiscoveryLookupPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http%22/>
<wsdl:operation name="Probe">
<soap:operation soapAction="http://www.onvif.org/ver10/network/wsdl/Probe%22/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>
完畢之後,再將產生出來的*.nsmap檔加上這行
{"dn", "http://www.onvif.org/ver10/network/wsdl", NULL, NULL},
保證你的discovery就大功告成了!!
相關文章:Onvif ws-discovery