Puis-je changer l'espace de noms de l'interface WCF ServiceContract sans changer le service?

StackOverflow https://stackoverflow.com/questions/4817635

  •  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?

Était-ce utile?

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 de name= a la classe de service nom de type .NET complet (y compris l'espace de noms .NET)

  • l'attribut <endpoint> de la balise de contract= 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 ..

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