Comment puis-je tester la connectivité à un service Web inconnu en C #?
Je suis occupé à écrire une classe qui surveille l'état des connexions RAS. J'ai besoin de tester pour vous assurer que la connexion n'est pas seulement connecté, mais aussi qu'il peut communiquer avec mon web service. Étant donné que cette classe sera utilisée dans de nombreux projets d'avenir, je voudrais un moyen de tester la connexion au webservice sans rien y connaître.
Je pensais en passant l'URL de la classe afin qu'elle au moins sait où le trouver. Envoyer une requête ping au serveur n'est pas suffisant de test. Il est possible que le serveur soit disponible, mais le service hors ligne.
Comment puis-je efficace de tester que je suis en mesure d'obtenir une réponse du service web?
source d'informationauteur RichieACC
Vous devez vous connecter pour publier un commentaire.
Vous êtes en droit d'interroger le serveur n'est pas suffisant. Le serveur peut être, mais le service web indisponible en raison d'un certain nombre de raisons.
Pour surveiller notre service web, les connexions, j'ai créé un IMonitoredService interface qui a une méthode CheckService(). La classe wrapper pour chaque service web implémente cette méthode à appeler une méthode inoffensive sur le service web et indique si le service est en place ou pas. Cela permet à n'importe quel nombre de services à surveiller avec le code responsable de la surveillance de connaître les détails du service.
Si vous en savez un peu plus sur ce que le web service sera de retour à partir d'accéder à l'URL directement, vous pouvez essayer en utilisant simplement l'URL. Par exemple, Microsoft asmx fichier renvoie un résumé du service web. D'autres implémentations peuvent se comporter différemment.
Vous pouvez essayer la qui teste le site web de l'existence:
L'astuce: créer une interface/baseclass avec la méthode "InvokeWithSomeParameters". Le sens de "SomeParameters" doit être un "paramètres de 100% n'affecte pas les importantes de l'etat".
Je pense, il y a 2 cas:
Je ne pense pas que, ce qui est le plus clair de solution, mais il devrait fonctionner.
Comment au sujet de l'ouverture d'une connexion TCP/IP sur le port utilisé par le webservice? Si la connexion fonctionne, la connexion RAS, le reste du réseau et l'hôte sont tous de travail. Le webservice est presque certainement trop en cours d'exécution.
Si c'est un Microsoft de SAVON ou de service WCF et la découverte de services est autorisé, vous pouvez demander à la page web serviceurl + "?disco" pour la découverte. Si ce qui est retourné est un document XML valide , vous savez que le service est bel et bien vivant. Un non-Microsoft service SOAP qui ne permet pas ?disco sera probablement de retour valide XML.
Exemple de code:
Si le serveur web est présent, mais le service n'existe pas, une exception sera levée rapidement pour l'erreur 404. Le temps assez long dans l'exemple est de permettre une lente service WCF pour redémarrer après une longue période d'inactivité ou après la commande iisreset. Si le client a besoin d'être réactif, vous pourriez sondage avec un court délai d'attente jusqu'à ce que le service est disponible.