2011年8月4日 星期四

ONVIF Discovery的一二事

很多在做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

沒有留言:

張貼留言