С#: Как программно проверять веб-сервис и работает?

Мне нужно создать приложение С#, которое будет контролировать, запущен и запущен набор веб-сервисов. Пользователь выберет имя службы из раскрывающегося списка. Программе необходимо протестировать с соответствующим URL-адресом службы и показать, работает ли служба. Каков наилучший способ сделать это? Один из способов, о котором я думаю, - проверить, можем ли мы загрузить wsdl. Есть ли способ лучше?

Примечание. Цель этого приложения заключается в том, что пользователю необходимо знать только имя службы. Ему не нужно помнить/хранить соответствующий URL-адрес службы.

Мне нужна версия веб-сайта и версия настольного приложения этого приложения С#.

Примечание. Существующие службы используют WCF. Но в будущем может быть добавлена ​​услуга, отличная от WCF.

Примечание. Моя программа не будет знать (или не интересуется) операциями в службе. Поэтому я не могу вызвать сервисную операцию.

ССЫЛКА

Ответ 1

это не гарантирует функциональность, но по крайней мере вы можете проверить возможность подключения к URL-адресу:

var url = "http://url.to.che.ck/serviceEndpoint.svc";

try
{
    var myRequest = (HttpWebRequest)WebRequest.Create(url);

    var response = (HttpWebResponse)myRequest.GetResponse();

    if (response.StatusCode == HttpStatusCode.OK)
    {
        //  it at least in some way responsive
        //  but may be internally broken
        //  as you could find out if you called one of the methods for real
        Debug.Write(string.Format("{0} Available", url));
    }
    else
    {
        //  well, at least it returned...
        Debug.Write(string.Format("{0} Returned, but with status: {1}", 
            url, response.StatusDescription));
    }
}
catch (Exception ex)
{
    //  not available at all, for some reason
    Debug.Write(string.Format("{0} unavailable: {1}", url, ex.Message));
}

Ответ 2

Возможно, я опоздал с ответом, но этот подход работает для меня. Я использовал Socket, чтобы проверить, может ли процесс подключиться. HttpWebRequest работает, если вы попытаетесь проверить соединение 1-3 раза, но если у вас есть процесс, который будет работать 24 часа и время от времени необходимо проверить доступность веб-сервера, который больше не будет работать, потому что выкинет TimeOut Exception.

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                var result = socket.BeginConnect("xxx.com", 80, null, null);
                bool success = result.AsyncWaitHandle.WaitOne(3000,false); // test the connection for 3 seconds
                var resturnVal = socket.Connected;
                if (socket.Connected)
                    socket.Disconnect(true);
                socket.Dispose();
                return resturnVal;