class ServicePinger { private static readonly ILog log = LogManager.GetLogger(typeof(ServicePinger)); public ServicePinger(string siteName, string siteUrl, string serviceUrl) { if (siteName == null) throw new ArgumentException("siteName can't be null"); if (siteUrl == null) throw new ArgumentException("siteUrl can't be null"); if (serviceUrl == null) throw new ArgumentException("serviceUrl can't be null"); if (siteName.Length == 0) throw new ArgumentException("siteName can't be empty"); if (siteUrl.Length == 0) throw new ArgumentException("siteUrl can't be empty"); if (serviceUrl.Length == 0) throw new ArgumentException("serviceUrl can't be empty"); pingingSiteName = siteName; pingingSiteUrl = siteUrl; serviceUrlToPing = serviceUrl; } private string pingingSiteName = string.Empty; private string pingingSiteUrl = string.Empty; private string serviceUrlToPing = string.Empty; private int timeoutInMilliseconds = 3000; /// <summary> /// Does the actual pinging of the service /// </summary> public void Ping() { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrlToPing); request.Method = "POST"; request.ContentType = "text/xml"; request.Timeout = timeoutInMilliseconds; request.Credentials = CredentialCache.DefaultNetworkCredentials; Stream stream = (Stream)request.GetRequestStream(); using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.ASCII)) { writer.WriteStartDocument(); writer.WriteStartElement("methodCall"); writer.WriteElementString("methodName", "weblogUpdates.ping"); writer.WriteStartElement("params"); writer.WriteStartElement("param"); writer.WriteElementString("value", pingingSiteName); writer.WriteEndElement(); writer.WriteStartElement("param"); writer.WriteElementString("value", pingingSiteUrl); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); } request.GetResponse(); } catch (InvalidOperationException ex) { log.Error(ex); } catch (NotSupportedException ex) { log.Error(ex); } } }