2010-05-18 6 views
0

J'ai un problème de versioning avec un contrat de service WCF dans lequel un des nombreux points d'extrémité qui sont appelés pour l'opération manque une méthode du contrat.Puis-je savoir quelles méthodes WCF sont prises en charge sur le point de terminaison avant de l'appeler?

Ma question est, comment puis-je m'assurer que la commande est disponible sur le client avant d'essayer de l'appeler?

J'ai essayé:

foreach (var od in proxy.Endpoint.Contract.Operations) 
    { 
    if (od.Name == "MyMethodName") 
    { 
     hasMethod = true; 
     break; 
    } 
    } 

Malheureusement, cela est d'utiliser le contrat de l'application d'appel et ne décrit pas réellement les mises en œuvre sur le point final lui-même. Par conséquent, il renvoie true même si le point de terminaison n'a pas réussi à implémenter la commande.

Répondre

2

Vous ne le saurez jamais avant de l'avoir essayé. Ce que vous avez est un proxy du contrat implémenté, mais ce qui est du côté du serveur pourrait avoir changé depuis que vous l'avez créé/généré.

En supposant qu'il s'agit d'une implémentation http/httpws, je suppose que vous pouvez appeler et vérifier la référence de service et télécharger le fichier wsdl. Cela vous dira quelles méthodes sont supportées. Le problème que vous allez rencontrer est que même si le nom de la méthode peut être le même, vous devrez également vérifier le type de retour et les paramètres pour être sûr que c'est la même méthode et que vous pouvez l'appeler avec le proxy que vous avez actuellement.

Voici un lien sur versioning dans WCF:
http://msdn.microsoft.com/en-us/library/ms731060.aspx

Voici un lien sur les meilleures pratiques pour versioning WCF:
Best practices for versioning your services with WCF?

+0

Merci. Malheureusement, nous sommes dans une sorte de scénario inversé ici. Les clients ont reçu l'interface et ont demandé à l'implémenter avec un service. Nous, en tant qu'hôte, les appelons (ce point de terminaison), et en tant que tels, nous n'avons pas la possibilité d'implémenter la gestion des versions pour les nouvelles méthodes car elles sont le serveur dans ce cas, pas nous. Aussi, je pense que nous avons mis en place nos services pour servir Mex seulement pour générer les proxies initiaux via svcutil. Nous ne poussons pas les configurations de Mex à la production. – devlord

Questions connexes