Puis-je changer l'espace de noms de l'interface WCF ServiceContract sans changer le service?
-
26-10-2019 - |
Question
Est-il possible de changer l'espace de noms .NET d'un WCF ServiceContract Interface encore faire encore l'arrière compatible service WCF avec les clients qui utilisent l'ancien (identique à l'exception de l'espace de noms) ServiceContract? Par exemple, supposons que je (en vb.net):
Namespace MyCompany.MyPoorlyNamedProject
<ServiceContract(Name:="ThingService")> _
<CLSCompliant(True)> _
Public Interface IThingService
...
End Interface
EndNamespace
Et je veux que le changement à
Namespace MyCompany.MyProject
<ServiceContract(Name:="ThingService")> _
<CLSCompliant(True)> _
Public Interface IThingService
...
End Interface
End Namespace
Sans changer le service du tout.
J'ai essayé de faire tellement, mais mes XSD appelé le wsdl le nouveau nom d'espace de noms, ce qui semble être une incompatibilité.
Toutes les idées?
La solution
Tant que l'espace de noms et le nom (XML) de votre contrat de service ne change pas - vous! services WCF ne se soucient pas vraiment sur les entrailles .NET de la façon dont ils sont mis en œuvre.
Cela fonctionne tant que les attaches du côté client à votre service en utilisant la méthode standard Add Service Reference
(interrogation des métadonnées du service pour créer un proxy côté client séparé) - dans ce cas, le proxy côté client a aucune connaissance de toute namespaces .NET côté service ... vous pouvez modifier ceux du côté du service et de redéployer vos fichiers de service -. le client continuera à travailler
Le seul endroit où vous aurez besoin de faire un ajustement est dans la configuration de votre côté service (en web.config
si vous hébergez dans IIS, dans le app.config
de votre hebergeur autrement):
-
l'attribut
<service>
de la balise dename=
a la classe de service nom de type .NET complet (y compris l'espace de noms .NET) -
l'attribut
<endpoint>
de la balise decontract=
a le nom de type .NET complet du contrat de service (y compris l'espace de noms .NET)
ne fonctionne pas, évidemment, si vous partagez un ensemble commun avec le contrat de service - dans ce cas, le côté client sera lié à l'espace de noms .NET de ces dossiers contractuels dans un ensemble commun et si les changements, le client ne fonctionne plus ..