Если это служба Microsoft SOAP или WCF, и обнаружение службы разрешено, вы можете запросить обнаружение на веб-странице serviceurl + "? Disco". Если то, что возвращается, является действительным XML-документом, вы знаете, что сервис жив и здоров. Служба SOAP не Microsoft, которая не разрешает? Disco, вероятно, также вернет действительный XML.
Пример кода:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "?disco");
request.ClientCertificates.Add(
new X509Certificate2(@"c:\mycertpath\mycert.pfx", "<privatekeypassword>")); // If server requires client certificate
request.Timeout = 300000; // 5 minutes
using (WebResponse response = request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
{
XmlDocument xd = new XmlDocument();
xd.LoadXml(sr.ReadToEnd());
return xd.DocumentElement.ChildNodes.Count > 0;
}
Если веб-сервер присутствует, но служба не существует, для ошибки 404 будет быстро создано исключение. Довольно длительный тайм-аут в этом примере состоит в том, чтобы позволить медленной службе WCF перезапуститься после длительного периода бездействия или после iisreset. Если клиент должен реагировать, вы можете опрашивать с более коротким таймаутом, пока сервис не станет доступным.