Net pingの実現方法

3147 ワード

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);

            }







        }



    }