Gibt es eine Möglichkeit, den .NET-Namespace einer WCF-ServiceContract-Schnittstelle zu ändern und gleichzeitig den WCF-Dienst rückwärtskompatibel mit Clients zu machen, die den alten (mit Ausnahme von Namespaces) ServiceContract verwenden? Angenommen, ich habe (in vb.net):
%Vor%Und ich möchte das zu
ändern %Vor%Ohne den Dienst zu ändern.
Ich habe es gerade versucht, aber meine xsds, auf die von der wsdl verwiesen wird, zeigen den Namen des neuen Namespace, der eine Inkompatibilität zu sein scheint.
Irgendwelche Ideen?
Solange sich der Name und (XML) Namespace Ihres Servicevertrags nicht ändern - klar! WCF-Dienste interessieren sich nicht wirklich für die .NET-Interna ihrer Implementierung.
Dies funktioniert so lange, wie sich die Clientseite mit der Standardmethode Add Service Reference
an Ihren Dienst anfügt (Abfragen der Metadaten des Dienstes, um einen separaten clientseitigen Proxy zu erstellen). In diesem Fall hat der clientseitige Proxy keine Kenntnis von allen serviceseitigen .NET-Namespaces ... Sie können diese auf der Serviceseite ändern und Ihre Servicedateien erneut bereitstellen - der Client wird weiterhin funktionieren.
Der einzige Ort, an dem Sie eine Anpassung vornehmen müssen, ist in der Konfiguration Ihrer Serviceseite (in web.config
, wenn Sie in IIS hosten, andernfalls in app.config
Ihres Hoster):
Das Attribut <service>
des name=
-Tags hat den vollqualifizierten .NET-Typnamen der Serviceklasse (einschließlich .NET-Namespace)
Das Attribut <endpoint>
des contract=
-Tags hat den vollständig qualifizierten .NET-Typnamen des Servicevertrags (einschließlich .NET-Namespace)
Dies funktioniert natürlich nicht, wenn Sie eine gemeinsame Assembly mit dem Servicevertrag teilen. In diesem Fall wird die Clientseite mit dem .NET-Namespace dieser Vertragsdateien in einer gemeinsamen Assembly verknüpft, und wenn sich diese ändern, Der Client wird nicht mehr funktionieren.
Tags und Links wcf servicecontract