Kann ich den Namespace der WCF ServiceContract-Schnittstelle ändern, ohne den Dienst zu ändern?

8

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?

    
Patrick Szalapski 27.01.2011, 14:33
quelle

1 Antwort

12

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.

    
marc_s 27.01.2011, 14:49
quelle

Tags und Links