2009-02-19 16 views
7

की उपलब्धता की जांच करें मैं डब्ल्यूसीएफ वेब सेवा की उपलब्धता की जांच करना चाहता हूं i.c सेवा सी # कोड के माध्यम से ऊपर या नीचे है। इसे कैसे प्राप्त करें?डब्ल्यूसीएफ वेब सेवा

+0

पूर्ण स्रोत कोड के साथ किसी भी अंतिम समाधान जोड़ सकता हूँ? – Kiquenet

उत्तर

9

जब आप Client.Open पर कॉल करते हैं तो यह नीचे है कि एक अपवाद फेंकना चाहिए जिसे आप जाल कर सकते हैं।
मैं जो करना पसंद करता हूं वह एक विधि लागू करता है जो पिंग नामक बूलियन लौटाता है। कोड मूल रूप से return true; करता है, इसलिए यह जितनी जल्दी हो सके लौटता है। क्लाइंट साइड पर मैं इसे कॉल करता हूं और अपवादों को फँसता हूं, अगर मुझे कोई मिलता है तो मुझे पता है कि वेब सेवा नीचे है।
आप PingCheckDB या PingCheckX जैसी चीजों को करने के लिए पैटर्न का विस्तार कर सकते हैं जो नकली/नमूना परीक्षण चला सकता है ताकि आप उपलब्ध होने के आधार पर क्लाइंट पर कार्यक्षमता को सक्षम/अक्षम कर सकें।

+0

कृपया कोई नमूना कोड, कृपया। धन्यवाद –

+1

@ अल्लाहबरा विधि सार्वजनिक बूल पिंग() { वापस लौट आएगा; } वास्तव में सबसे दिलचस्प तरीका नहीं है। –

+0

ओपन() जब मैं नेटवर्किंग बंद करता हूं तो अपवाद नहीं फेंकता है। – nurettin

7

पिछले उत्तर को विस्तारित करने के लिए: यह निर्धारित करने का एकमात्र तरीका है कि कोई सेवा "उपलब्ध" है या नहीं, यह निर्धारित करना है कि "उपलब्ध" से आपका क्या मतलब है। उदाहरण के लिए, एक सेवा जो डेटाबेस जैसे बाह्य संसाधन पर निर्भर करती है पूरी तरह से उपलब्ध हो सकती है, लेकिन यदि डेटाबेस तक पहुंचा नहीं जा सकता है, तो सेवा उपलब्ध होगी लेकिन बेकार होगी।

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

कई मामलों में, बस आगे बढ़ना और वेब सेवा पर कॉल करना सर्वोत्तम है, फिर किसी भी अपवाद को संभालें। यदि आपने सेवा में भेजे गए पैरामीटर को सत्यापित किया है, तो, अंतिम उपयोगकर्ता के दृष्टिकोण से, सेवा की किसी भी विफलता सेवा अनुपलब्ध होने पर है।

यह सफलतापूर्वक उपयोग करने के लिए उपलब्ध नहीं है, आप देखते हैं।

0

यही वह है जो मैं उपयोग कर रहा हूं और यह बहुत अच्छा काम करता है। और यदि आप इसे अर्हता प्राप्त करने के लिए शीर्ष पर एक उपयोग कथन का उपयोग करना चाहते हैं, तो ServiceController नामस्थान 'System.ServiceProcess' में रहता है।

try 
{ 
    ServiceController sc = new ServiceController("Service Name", "Computer's IP Address"); 
    Console.WriteLine("The service status is currently set to {0}", 
     sc.Status.ToString()); 

    if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) || 
     (sc.Status.Equals(ServiceControllerStatus.StopPending))) 
    { 
     Console.WriteLine("Service is Stopped, Ending the application..."); 
     Console.Read(); 
     EndApplication(); 
    } 
    else 
    { 
     Console.WriteLine("Service is Started..."); 
    } 
} 
catch (Exception) 
{ 
    Console.WriteLine("Error Occurred trying to access the Server service..."); 
    Console.Read(); 
    EndApplication(); 
} 
0

मैं निम्नलिखित कोड का उपयोग करता हूं। यह आसान है और काम करता है ...

public bool IsServiceRunning() 
    { 
     try 
     { 
      System.Net.WebClient wc = new System.Net.WebClient(); 
      string s = wc.DownloadString(new Uri("http://localhost:27777/whatever/services/GatherDataService?wsdl")); 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

     return true; 
    } 

सिर्फ अपने अंत बिंदु uri लेने के लिए और? Wsdl

संबंधित मुद्दे