2009-06-25 53 views
16

कोई भी रिमोट सर्वर उपलब्ध होने पर जांचने का सबसे अच्छा तरीका (.NET 3.5 का उपयोग करके) क्या सलाह दे सकता है?सी # रिमोट सर्वर की जांच करें

मैं निम्नलिखित कोड का उपयोग करने के बारे में सोच रहा था लेकिन यह जानना चाहूंगा कि समुदाय के पास दूसरा विकल्प है या नहीं।

TcpClient client = new TcpClient("MyServer", 80); 
if (!client.Connected) 
{ 
    throw new Exception("Unable to connect to MyServer on Port 80"); 
} 
client.Close(); 

उत्तर

25

आप इसे

आप कर सकते थे download the default page यह

आप एक HEAD अनुरोध

यह अपने नेटवर्क पर एक स्थानीय IIS6 सर्वर है, तो कर सकता है, और आप कुछ व्यवस्थापक जानकारी से, आप कर सकते थे ping सकता है connect to IIS कुछ निर्देशिका एंटर्री कोड

136615 पर कुछ उत्तर भी मदद कर सकते हैं, विशेष रूप से स्वीकृत उत्तर इसके बारे में बात करते हैं कि sockets

प्रिंट सर्वर (या, विशेष रूप से, प्रिंटर) के लिए, के स्कॉट here द्वारा कोड मदद कर सकता है। यह :-) कि कोड dns.resolve, जो पुराना हो और द्वारा Dns.GetHostEntry

मैं के बारे में :-) विचारों से बाहर

+2

मैंने इस पोस्ट से बहुत कुछ सीखा है। ईमानदारी से, क्रिस। –

8

यदि आप सिर्फ यह देखना चाहते हैं कि कोई दिया गया सर्वर ऑनलाइन है, तो अधिकांश मामलों में एक साधारण पिंग को नौकरी करना चाहिए।

PingReply pingReply; 
using (var ping = new Ping()) 
    pingReply = ping.Send("http://www.stackoverflow.com/"); 
var available = pingReply.Status == IPStatus.Success; 

इस विधि का उपयोग करके आप किसी भी तरह से HTTP सर्वर का दुरुपयोग नहीं कर रहे हैं।

अन्यथा (यदि आप यह जांचना चाहते हैं कि किसी विशिष्ट पोर्ट पर कनेक्शन संभव है या नहीं), जो मूल रूप से ठीक दिखता है।

+0

मैं यह धारणा थी कि पिंग वस्तु का उपयोग कर एक कॉर्पोरेट इंट्रानेट में या एक firewalled नेटवर्क के भीतर उचित नहीं था: उसके बाद, आप एक मेजबान disponibility जाँच करने के लिए HttpWebRequest उपयोग कर सकते हैं? मुझे शायद यह कहना चाहिए था कि मैं कॉर्पोरेट नेटवर्क पर उपलब्धता की जांच करना चाहता हूं।क्या कोई टिप्पणी कर सकता है? – Kane

+0

@ केन: यह सलाह क्यों नहीं दी जाएगी? एक पिंग एक मेजबान की उपलब्धता की जांच के लिए मानक, कोशिश की और परीक्षण किया जाता है। बहुत से HTTP कनेक्शन खोलना और कुछ भी करने से दुर्व्यवहार/दुर्भाग्य की मात्रा अधिक होने की संभावना है। यदि पिंग बंदरगाह बंद है, तो यह एक अलग मामला है - हालांकि, यह * खुला होना चाहिए। – Noldorin

+0

मैंने सोचा कि अगर फ़ायरवॉल पिंग (आईसीएमपी इको) पैकेट को अवरुद्ध करता है तो पिंग काम नहीं कर सकता है? क्या यह सच हो सकता है क्योंकि मैं वास्तव में नहीं जानता? – Kane

1

मुझे लगता है कि आप यह देखना चाहते हैं कि कोई वेबसाइट उपलब्ध है या नहीं। आप बस System.Net.WebRequest का उपयोग कर सकते हैं और परिणाम की जांच कर सकते हैं।

अद्यतन: , अपनी टिप्पणी के आधार पर अगर आप कुछ सर्वर (और सेवाओं) की निगरानी के लिए मिल गया है, तो शायद यह एक बेहतर विचार एक पैकेज के रूप में Nagios, HostMonitor या IPSentry बजाय का उपयोग करने के होगा अपना खुद का रोलिंग

+0

मुझे कई सर्वरों की जांच करने की आवश्यकता है। जिनमें से कुछ वेब सर्वर कुछ सरल विंडोज आधारित फ़ाइल/प्रिंट सर्वर हैं। – Kane

3

सिर्फ दान के जवाब में जोड़ने के लिए कर रहा हूँ बदल दिया जाता है का उल्लेख के साथ वैसे भी खेलने के लिए मज़ा कोड है .. मुझे बस इसे लागू करना पड़ा और यहां एक अच्छा छोटा कोड स्निपेट है जो इसे Google से यहां बनाने में मदद करेगा।

Imports System.Net 
Private Function URLExists(pURL As String) As Boolean 

    Try 
     'Creating the HttpWebRequest 
     Dim request As HttpWebRequest = TryCast(WebRequest.Create(pURL), HttpWebRequest) 
     'Setting the Request method HEAD, you can also use GET too. 
     request.Method = "HEAD" 
     'Getting the Web Response. 
     Dim response As HttpWebResponse = TryCast(request.GetResponse(), HttpWebResponse) 
     'Returns TURE if the Status code == 200 
     Return (response.StatusCode = HttpStatusCode.OK) 
    Catch 
     'Any exception will returns false. 
     Return False 
    End Try 
End Function 

क्षमा करें यह वीबी है लेकिन मेरे सामने यही था। मैं पाठक के लिए इसे आवश्यकतानुसार सी # में परिवर्तित करने के लिए एक अभ्यास के रूप में छोड़ दूंगा।

2

यदि आप .NET Framework के पिछले संस्करण का उपयोग कर रहे हैं, तो मेरे जैसे संस्करण 2, आपके पास कोई पिंग नहीं होगा और System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() नहीं होगा।

public static bool AccessToWebService() 
    { 
     string host = "http://192.168.99.41"; 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest) WebRequest.Create(host); 
      request.Method = "HEAD"; 
      HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 
      return response.StatusCode == HttpStatusCode.OK; 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
    } 
संबंधित मुद्दे