web-dev-qa-db-fra.com

C #: Comment vérifier par programme qu'un service Web est opérationnel?

Je dois créer une application C # qui surveillera si un ensemble de services Web est opérationnel. L'utilisateur sélectionnera un nom de service dans une liste déroulante. Le programme doit tester avec l'URL du service correspondant et montrer si le service est en cours d'exécution. Quelle est la meilleure façon de procéder? Une façon dont je pense est de tester si nous pouvons télécharger le wsdl. IS existe-t-il une meilleure façon?

Remarque: Le but de cette application est que l'utilisateur doit connaître uniquement le nom du service. Il n'a pas besoin de mémoriser/stocker l'URL correspondante du service.

J'ai besoin d'une version de site Web et d'une version d'application de bureau de cette application C #.

Remarque: les services existants utilisent WCF. Mais à l'avenir, un service non WCF pourrait être ajouté.

Remarque: Mon programme ne sera pas au courant (ou ne sera pas intéressé par) les opérations du service. Je ne peux donc pas appeler une opération de service.

RÉFÉRENCE

  1. Comment vérifier si un service Web est opérationnel sans utiliser de ping?
  2. programme C-Comment puis-je vérifier si un service Web est en cours d'exécution
16
Lijo

cela ne garantirait pas la fonctionnalité, mais au moins vous pourriez vérifier la connectivité à une 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's 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));
}
34
paul

Je suis peut-être trop tard avec la réponse, mais cette approche fonctionne pour moi. J'ai utilisé Socket pour vérifier si le processus peut se connecter. HttpWebRequest fonctionne si vous essayez de vérifier la connexion 1 à 3 fois, mais si vous avez un processus qui s'exécutera 24h/24 et devra de temps en temps vérifier la disponibilité du serveur Web qui ne fonctionnera plus, car il lèvera 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;
4
Victor