如何使用Onvif库c#获取设备信息?

4
我正在制作一个使用开源库Onvif的C# Windows应用程序,它可以收集连接到我的网络上的设备。
我是这样做的。
    ServicePointManager.Expect100Continue = false;
    var endPointAddress = new EndpointAddress("http://ip_address:port/onvif/device_service");
    var httpBinding = new HttpTransportBindingElement();            
    var bind = new CustomBinding(httpBinding);
    var temp = new DeviceClient(bind, endPointAddress);
    var request = new GetDeviceInformationRequest();
    var response = temp.GetDeviceInformation(request); ////// Error Here described bellow
    string firm = response.FirmwareVersion;
    string manu = response.Manufacturer;
    string serial = response.SerialNumber;
    string model = response.Model;

错误信息::没有端点在http://something:port/onvif/device_service处监听,可以接受消息。这通常是由于地址或SOAP操作不正确引起的。
有人能帮助我吗?
我认为我没有与服务器建立正确的连接,是这样吗?如果是,那该如何解决?

1
你正在使用哪个开源的Onvif库? - Grifo
“http://ip_address:port/onvif/device_service” 是在“Hello”或“ProbeMatch”数据包中返回的ListenURI吗?并非所有NVT都侦听“…/onvif/device_service”。这是URL的目的,但不需要确切的文本。 - Jesse Chisholm
另外,您可能需要通知绑定 NVT 需要的凭据。 - Jesse Chisholm
2个回答

2
也许WS-DISCOVERY会为您提供额外的信息。我建议不要在摄像头IP后使用任何端口。
当测试向多播地址239.255.255.250,端口3702(WS-Discovery)发送UDP时,这是摄像头的回答:
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dn="http://www.onvif.org/ver10/network/wsdl">
  <SOAP-ENV:Header>
    <wsa:MessageID>uuid:cb3dea50-aa60-11e1-88b9-00408cb972aa</wsa:MessageID>
    <wsa:RelatesTo>uuid:5bca11ff-61b8-4d07-8a26-90274ad51db8</wsa:RelatesTo>
    <wsa:To SOAP-ENV:mustUnderstand="true">http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
    <wsa:Action SOAP-ENV:mustUnderstand="true">http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches</wsa:Action>
    <d:AppSequence SOAP-ENV:mustUnderstand="true" MessageNumber="1" InstanceId="1338367479"></d:AppSequence>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <d:ProbeMatches>
      <d:ProbeMatch>
        <wsa:EndpointReference>
          <wsa:Address>urn:uuid:65a142fc-a41e-11e1-9cc8-00408cb972aa</wsa:Address>
        </wsa:EndpointReference>
        <d:Types>dn:NetworkVideoTransmitter</d:Types>
        <d:Scopes>
            onvif://www.onvif.org/type/video_encoder 
            onvif://www.onvif.org/type/ptz 
            onvif://www.onvif.org/hardware/P5534-E 
            onvif://www.onvif.org/name/AXIS%20P5534-E 
            onvif://www.onvif.org/location/ 
        </d:Scopes>
        <d:XAddrs>
            h##p://zeroconfIP/onvif/device_service 
            h##p://unicastIP/onvif/device_service
        </d:XAddrs>
        <d:MetadataVersion>1</d:MetadataVersion>
      </d:ProbeMatch>
    </d:ProbeMatches>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

尝试查找响应并检查是否存在任何不是您所期望的默认XAddrs。


是的,我已经在ODM上尝试过了,但它也返回了我在这里提到的相同错误。 - Azeem Akram
抱歉,请求必须发送到device_service。 - chirrin dul ari
特别是,device_service的XAddr对于99%的NVT来说将是.../onvif/device_service,但它可能是任何东西。最好检查ProbeMatch(或Hello)并使用它,而不是在代码中计算它。根据您上面的评论,我推测您的NVT总是选择.../onvif/device_service。尝试将该URL粘贴到浏览器中。您应该会看到一个合理的响应。还可以尝试使用SoapUI验证您的NVT是否正常运行。 - Jesse Chisholm

-1
Foscam FI9805E 在 ONVIF GetCapabilities 上的 SOAP 响应。

-

-

-<tds:GetCapabilitiesResponse>


  -<tds:Capabilities xsi:type="tt:Capabilities">


    -<tt:Analytics xsi:type="tt:AnalyticsCapabilities">

      <tt:XAddr>http://192.168.1.210:8888/onvif/device_service</tt:XAddr>

      <tt:RuleSupport>true</tt:RuleSupport>

      <tt:AnalyticsModuleSupport>true</tt:AnalyticsModuleSupport>

    </tt:Analytics>


    -<tt:Device xsi:type="tt:DeviceCapabilities">

      <tt:XAddr>http://192.168.1.210:8888/onvif/device_service</tt:XAddr>


      -<tt:Network xsi:type="tt:NetworkCapabilities">

        <tt:IPFilter>false</tt:IPFilter>

        <tt:DynDNS>true</tt:DynDNS>

      </tt:Network>


      -<tt:System xsi:type="tt:SystemCapabilities">

        <tt:DiscoveryResolve>true</tt:DiscoveryResolve>

        <tt:DiscoveryBye>true</tt:DiscoveryBye>

        <tt:RemoteDiscovery>false</tt:RemoteDiscovery>

        <tt:SystemBackup>true</tt:SystemBackup>

        <tt:SystemLogging>true</tt:SystemLogging>

        <tt:FirmwareUpgrade>true</tt:FirmwareUpgrade>


        -<tt:SupportedVersions xsi:type="tt:OnvifVersion">

          <tt:Major>2</tt:Major>

          <tt:Minor>21</tt:Minor>

        </tt:SupportedVersions>

      </tt:System>


      -<tt:Security xsi:type="tt:SecurityCapabilities">

        <tt:TLS1.1>false</tt:TLS1.1>

        <tt:TLS1.2>false</tt:TLS1.2>

        <tt:OnboardKeyGeneration>false</tt:OnboardKeyGeneration>

        <tt:AccessPolicyConfig>true</tt:AccessPolicyConfig>

        <tt:X.509Token>false</tt:X.509Token>

        <tt:SAMLToken>false</tt:SAMLToken>

        <tt:KerberosToken>false</tt:KerberosToken>

        <tt:RELToken>false</tt:RELToken>

      </tt:Security>

    </tt:Device>


    -<tt:Events xsi:type="tt:EventCapabilities">

      <tt:XAddr>http://192.168.1.210:8888/onvif/device_service</tt:XAddr>

      <tt:WSSubscriptionPolicySupport>false</tt:WSSubscriptionPolicySupport>

      <tt:WSPullPointSupport>true</tt:WSPullPointSupport>

      <tt:WSPausableSubscriptionManagerInterfaceSupport>false</tt:WSPausableSubscriptionManagerInterfaceSupport>

    </tt:Events>


    -<tt:Imaging xsi:type="tt:ImagingCapabilities">

      <tt:XAddr>http://192.168.1.210:8888/onvif/device_service</tt:XAddr>

    </tt:Imaging>


    -<tt:Media xsi:type="tt:MediaCapabilities">

      <tt:XAddr>http://192.168.1.210:8888/onvif/device_service</tt:XAddr>


      -<tt:StreamingCapabilities xsi:type="tt:RealTimeStreamingCapabilities">

        <tt:RTPMulticast>false</tt:RTPMulticast>

        <tt:RTP_TCP>true</tt:RTP_TCP>

        <tt:RTP_RTSP_TCP>true</tt:RTP_RTSP_TCP>

      </tt:StreamingCapabilities>

    </tt:Media>


    -<tt:PTZ xsi:type="tt:PTZCapabilities">

      <tt:XAddr>http://192.168.1.210:8888/onvif/device_service</tt:XAddr>

    </tt:PTZ>


    -<tt:Extension xsi:type="tt:CapabilitiesExtension">


      -<tt:DeviceIO xsi:type="tt:DeviceIOCapabilities">

        <tt:XAddr/>

        <tt:VideoSources>1</tt:VideoSources>

        <tt:VideoOutputs>0</tt:VideoOutputs>

        <tt:AudioSources>1</tt:AudioSources>

        <tt:AudioOutputs>0</tt:AudioOutputs>

        <tt:RelayOutputs>0</tt:RelayOutputs>

      </tt:DeviceIO>

    </tt:Extension>

  </tds:Capabilities>

</tds:GetCapabilitiesResponse>


欢迎来到SO:SE。您能详细说明一下您的答案吗?它与问题的匹配程度如何?请参见[答案]。 - mins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接