Question

J'ai 2 contrats (cA & cb) mis en œuvre par un seul service WCF avec 2 points d'extrémité (Epa et EPB).

pas pour des raisons de sécurité, mais uniquement pour des raisons de clarté / organisation, je voudrais que « voir » les opérations de contracta quand je découvre le service via endpointA; et de même, ne voient que les opérations de ContractB via endpointB.

Je ne suis pas besoin de « protéger » ces opérations en tant que telles. Le scénario est tel que tout client donné n'a besoin que d'un « côté » du service, jamais les deux (mais les opérations elles-mêmes partagent des ressources, il est logique d'avoir un seul service au lieu de 2 services).

Il semble que tout service donné obtient essentiellement 1 WSDL, ergo toutes les opérations sont exposés à tous les critères d'évaluation. Est-ce la façon dont il fonctionne, ou est-il un moyen de « forme » un point final par les opérations occlure non définies par le contrat de terminaux?

Était-ce utile?

La solution

Par défaut, vous avez raison - un service de classe d'implémentation obtient un WSDL qui contient toutes les méthodes de service (de tous les contrats de services) que cette classe implémente de service

.

Il n'y a pas des moyens présents (pour autant que je sache) à « forme » WSDL dans un (facile) moyen - WCF fait des moyens d'offre pour entrer dans le processus de création du WSDL (statique ou dynamique), mais ces Aren « t pour les faibles de cœur. Il serait beaucoup plus facile pour vous de partager simplement de la mise en œuvre des contrats de service en deux classes distinctes et vous auriez deux services distincts, WSDL et si tous.

Autres conseils

Marc est absolutelly droit. Je suis juste ajouter pourquoi cela se produit dans WCF. Dans WCF toutes les fonctionnalités liées métadonnées sont basés sur le comportement des métadonnées de service et point final MEX. Ces deux caractéristiques sont définies au niveau de service. Donc, vous ne pouvez pas prendre granuality plus (à moins que vous écrivez beaucoup de code personnalisé) et spécifier des métadonnées par point final.

Service WCF (classe) est directement mis en correspondance avec WSDL: élément de service qui expose chaque contrat WSDL distinct: port (WCF connu sous le nom de noeud final). C'est le principal point de répondre à votre question. Si vous ne voulez pas que votre deuxième contrat que wsdl: service que vous ne pouvez pas le mettre en œuvre dans la même classe.

Vous avez mentionné que vos contrats de services partagent des ressources. Dans ce cas, votre service WCF contient probablement aussi la logique métier. C'est une raison de vos problèmes. La bonne conception pour la mise en œuvre des services WCF est de les créer uniquement des emballages autour des classes logiques d'affaires distinctes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top