2011-09-23 11 views
21

मैं अगर एक वेबसाइट ऑनलाइन को क्रियान्वित करने से पहले है की जाँच करने के सी # में मेरा कार्यक्रम चाहते हैं, कैसे मैं अपने कार्यक्रम पिंग वेबसाइट बनाने के लिए और सी # में एक प्रतिक्रिया के लिए जाँच करेगा?आप कैसे जांचते हैं कि वेबसाइट सी # में ऑनलाइन है या नहीं?

WebClient webClient = new WebClient(); 
byte[] result = webClient.DownloadData("http://site.com/x.html"); 

DownloadData अगर वेबसाइट ऑनलाइन नहीं है एक अपवाद फेंक देगा:

+5

[पिंग वर्ग] पर सिंक्रोनस और एसिंक्रोनस दोनों उदाहरण (है http://msdn.microsoft.com/en- हमें/पुस्तकालय/system.net.networkinformation.ping.aspx) एमएसडीएन पर पृष्ठ। – drew010

+0

+1। कुछ नया सीख लिया: डी –

+2

आप वेब क्लाइंट क्लास का भी उपयोग कर सकते हैं और संसाधन या यूआरएल का अनुरोध कर सकते हैं। पिंग का मतलब यह नहीं है कि वेबसाइट ऑनलाइन है, जब तक आप सिर्फ यह जांचना नहीं चाहते कि सर्वर चालू है। – lahsrah

उत्तर

38

आप उपयोग System.Net.NetworkInformation.Ping नीचे देखें है।

var ping = new System.Net.NetworkInformation.Ping(); 

var result = ping.Send("www.google.com"); 

if (result.Status != System.Net.NetworkInformation.IPStatus.Success) 
    return; 
+6

पिंग आपको यह नहीं बताती कि कोई वेबसाइट ऑनलाइन है या नहीं, केवल नेटवर्क स्टैक जवाब दे रहा है या नहीं। और भी, आप पिंग करने के लिए एक HTML यूआरएल पास कर रहे हैं, जो कानूनी नहीं होगा। –

+1

यह अब तक का सबसे अच्छा जवाब है, और देखकर कक्षा को "पिंग" भी कहा जाता है, यह शायद इसका सबसे सही उत्तर भी है। आपके सहयोग के लिए धन्यवाद। इसके अलावा, अगर किसी को भी भविष्य में इस पढ़ रही है, यहाँ के मैनुअल के लिए लिंक है: http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx – Alper

+0

मेरे लिए यह does not काम - यह आसानी से इसे संभालने और एक संबंधित आईपीस्टैटस मान – Laserson

1

सबसे आसान तरीका मैं के बारे में सोच सकते हैं की तरह कुछ है।

शायद उसी तरह बस साइट पिंग करने है, लेकिन यह संभावना नहीं है कि अंतर ध्यान देने योग्य है जब तक आप कई बार एक दूसरे की जाँच कर रहे हो जाएगा है।

+9

आपको यह सत्यापित करने के लिए पूरे पृष्ठ को डाउनलोड नहीं करना चाहिए कि साइट – BrokenGlass

+0

है वेबपृष्ठ क्लाइंट 503 में चलने के बाद httpwebrequest की बजाय मेरे लिए बेहतर काम कर रहा है, httpwebrequest 503 फेंकता रहता है जबकि वेब क्लाइंट फिर से काम कर रहा है। – bert

40

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

मेरे सुझाव वास्तव में HTML पृष्ठ लाने नहीं होंगे यूआरएल

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("your url"); 
request.AllowAutoRedirect = false; // find out if this site is up and don't follow a redirector 
request.Method = "HEAD"; 
try { 
    response = request.GetResponse(); 
    // do something with response.Headers to find out information about the request 
} catch (WebException wex) 
{ 
    //set flag if there was a timeout or some other issues 
} 

इस के खिलाफ एक HTTP HEAD अनुरोध प्रदर्शन करने के लिए है, लेकिन यह है कि तुम क्या आप जानना चाहते हैं की न्यूनतम पता लगाने के लिए मदद मिलेगी। क्षमा करें अगर कोड संकलित नहीं होता है, यह सिर्फ मेरे सिर के ऊपर से है।

+7

बिल्कुल सही। बीटीडब्ल्यू वास्तव में उन लोगों के लिए "हेड" के लिए एक आधार है जो देखभाल करते हैं। System.Net.WebRequestMethods.Http.Head। –

13

Digicoder के कोड और पिंग विधि की पूरी उदाहरण के लिए छोटे टिप्पणी:

private bool Ping(string url) 
{ 
    try 
    { 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
     request.Timeout = 3000; 
     request.AllowAutoRedirect = false; // find out if this site is up and don't follow a redirector 
     request.Method = "HEAD"; 

     using (var response = request.GetResponse()) 
     { 
      return true; 
     } 
    } 
    catch 
    { 
     return false; 
    } 
} 
+1

क्या होगा यदि सर्वर सेटिंग्स मुझे विशेष सर्वर पर httprequest भेजने की अनुमति नहीं देती है? – Adrian

+0

यदि आप ऐसे सर्वर का परीक्षण कर रहे हैं जो HEAD को अनुमति नहीं देता है लेकिन जीईटी या पोस्ट की अनुमति देता है, तो आपको झूठी सकारात्मक मिल जाएगी। – Vlad

+0

उत्तर के लिए धन्यवाद।आपने मुझे बहुत मदद की :) –

3
if (!NetworkInterface.GetIsNetworkAvailable()) 
{ 
    // Network does not available. 
    return; 
} 

Uri uri = new Uri("http://stackoverflow.com/any-uri"); 

Ping ping = new Ping(); 
PingReply pingReply = ping.Send(uri.Host); 
if (pingReply.Status != IPStatus.Success) 
{ 
    // Website does not available. 
    return; 
} 
+0

नेटवर्कइंटरफेस GetIsNetworkAvailable() पहले – LucasS

+0

मिथक को कायम रखने के लिए डाउनवोट को शामिल करने के लिए वोट दें कि एक पिंग प्रतिक्रिया के पास वेबसाइट उपलब्ध होने के साथ कुछ भी करना है। – spender

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

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