2010-04-03 19 views
1

Existe-t-il un moyen d'obtenir un contrat d'un service en cours de programmation? Je veux comparer le contrat d'un service courant d'un contrat référencé du côté client.Obtenir le contrat

Par exemple, j'ai deux instances de Service1 s'exécutant sur des machines différentes qui ont différentes implémentations. Ils ont tous deux un contrat nommé IService1 mais implémentation différente. J'ai une console1 qui a une référence à IService1 (première instance). Console1 possède une collection de 2 adresses de point de terminaison. Console1 veut vérifier lequel des services en cours d'exécution est le service correct pour le contrat (première instance) qu'il utilise.

Ce que je veux faire ici est d'obtenir par contrat le contrat du service en utilisant l'adresse et de le comparer au contrat référencé que j'ai.

Répondre

1

Si le service expose des métadonnées, il est possible que oui. Exactement comment dépend de la liaison utilisée, si c'est une liaison http normale, vous pouvez utiliser http://myserver/myservice.svc?WSDL. Pour comparer les contrats, vous devez télécharger le fichier WSDL en utilisant une API http normale, puis le comparer à un fichier WSDL de référence stocké.

Il y a aussi quelques choses que je pense que vous devriez prendre en considération avant de mettre en œuvre une comparaison:

  • Si les contrats ne correspond pas, WCF jeter des erreurs.
  • Un certain contrat, publié dans un certain espace de noms ne doit pas exister dans des versions différentes. C'est plus un problème de routine qu'un problème technique. Dans des cas comme le vôtre où le même contrat est mis en œuvre par différents services, une bonne routine pour les changements de contrat est nécessaire. Comment est-ce que je peux faire cela (http: //myserver/myservice.svc? WSDL) par programme?
+0

Comment faire? – Lance

+0

S'il expose une métadonnée, comment puis-je l'utiliser? – Lance