2012-11-16 15 views
9

में ONVIF उपकरणों को खोजने के लिए मैं एक आवेदन है कि ONVIF उपकरणों स्वत: खोज के लिए नेटवर्क पर संलग्न की जांच करेगा विकासशील कर रहा हूँ। जांच संदेश की ONVIF कोर विनिर्देश सोप प्रारूप के अनुसार है:कैसे सी #

<?xml version="1.0" encoding="UTF-8"?> 
<e:Envelope xmlns:e="http://www.w3.org/2003/05/soap-envelope" 
xmlns:w="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"> 
<e:Header> 
<w:MessageID>uuid:84ede3de-7dec-11d0-c360-f</w:MessageID> 
<w:To e:mustUnderstand="true">urn:schemas-xmlsoap-org:ws:2005:04:discovery</w:To> 
<w:Action 
a:mustUnderstand="true">http://schemas.xmlsoap.org/ws/2005/04/discovery/Pr 
obe</w:Action> 
</e:Header> 
<e:Body> 
<d:Probe> 
<d:Types>dn:NetworkVideoTransmitter</d:Types> 
</d:Probe> 
</e:Body> 
</e:Envelope> 

कैसे मैं WCF में इस संदेश को भेजने ONVIF deivce को खोजने के लिए कर सकते हैं?

उत्तर

16

बस WCF web service discovery सुविधाओं का उपयोग। ओएनवीआईएफ उसी मानक का पालन करता है जो डब्ल्यूसीएफ द्वारा लागू किया गया है। जांच भेजने के लिए आपको डिस्कवरी क्लाइंट क्लास का उपयोग करना होगा।

यह एक समय हो गया है के बाद से मैं इसे किया है तो यह बिल्कुल सही नहीं हो सकता है, लेकिन अपने कोड निम्नलिखित की तरह कुछ दिखना चाहिए। मल्टीकास्ट जांच सभी खोजने योग्य उपकरणों को मिलेगी। आप यह पता लगा सकते हैं कि ईवेंट ऑन हैंडलर में प्रत्येक प्रतिक्रिया के लिए मेटाडेटा का निरीक्षण करके आपके ऑनवीफ डिवाइस ने जवाब दिया है या नहीं। यदि आप अभी भी प्रतिक्रिया प्राप्त करने में असमर्थ हैं तो शायद यह एक नेटवर्क या डिवाइस समस्या है। यदि आपको कोई प्रतिक्रिया मिलती है तो आप केवल आवश्यक प्रकारों को सूचित करने के लिए अपने खोज मानदंडों को परिष्कृत कर सकते हैं।

class Program 
{ 
    static void Main(string[] args) 
    { 
     var endPoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005); 

     var discoveryClient = new DiscoveryClient(endPoint); 

     discoveryClient.FindProgressChanged += discoveryClient_FindProgressChanged; 

     FindCriteria findCriteria = new FindCriteria(); 
     findCriteria.Duration = TimeSpan.MaxValue; 
     findCriteria.MaxResults = int.MaxValue; 
     discoveryClient.FindAsync(findCriteria); 

     Console.ReadKey(); 
    } 

    static void discoveryClient_FindProgressChanged(object sender, FindProgressChangedEventArgs e) 
    { 
     //Check endpoint metadata here for required types. 

    } 
} 
+0

प्रिय साइमन, मैंने कोशिश की है लेकिन मुझे कोई प्रतिक्रिया नहीं मिली है। मैं इस सोप तत्व के बारे में भ्रमित कर रहा हूँ dn: NetworkVideoTransmitter है FindCriteria में इस जोड़ सकते हैं कैसे? – user1828855

+2

इसे खोजने के मानदंडों के अनुबंध प्रकार के नामों में जोड़ें। FindCriteria.ContractTypeNames। Onvif NetworkVideoTransmitter के संस्करण के आधार पर एक प्रकार के रूप में निर्दिष्ट नहीं किया जा सकता है। बिना मानदंड के एसिंक खोज करने का प्रयास करें। कॉल को वापस करने से यह आपको सभी खोज योग्य उपकरणों से प्रतिक्रियाओं का निरीक्षण करने की अनुमति देगा, आपके ऑनवीफ डिवाइस को शामिल किया जाना चाहिए। इस जानकारी से आपको अधिक लक्षित खोज करने में सक्षम होना चाहिए। –

+0

हुरा ....! मुझे अपने ONVIF डिवाइस से प्रतिक्रिया मिली। इस मार्गदर्शन साइमन के लिए Thnx बहुत कुछ। – user1828855