Ich kann kein Beispiel für die Generierung von Proxies aus WSDLs mit gemeinsam genutzten Typen finden, aber keine XSDs, die mit ihnen kompatibel sind. Kann jemand bitte dies als Duplikat markieren und mir bitte ein Beispiel zeigen?
Hier sind zwei Dienste, jeder hat seinen eigenen Namespace und einen gemeinsamen Typ. Das einzige, was öffentlich zugänglich ist, sind ihre WSDLs, es gibt keine XSD oder ihre .dll, die an wsdl.exe /sharedtypes
oder svcutils
übergeben werden, und ohne sie endet die identische class Foo
, die ich nicht an% weitergeben kann. co_de% und SetFoo
.
Das Beste, was ich mir vorstellen kann, ist das programmatische Generieren von Proxies und das Erkennen von Duplikaten über CodeDOM, wobei class Foo1
/ DataContract
Namespaces ignoriert werden, aber es ist ein riesiges Durcheinander ...
Es gibt eine Möglichkeit, dies zu tun, die hier beschrieben wird.
In Ihrem Fall können Sie den ersten Schritt überspringen, den Proxy von Dienst 1 generieren und dann das Flag / r auf SVCutil verwenden, um auf die Proxy-Assembly für Dienst 1 zu verweisen, wenn Sie Ihren Dienst-2-Proxy generieren.
Dies stellt sicher, dass Ihr Service 2-Proxy dieselbe Instanz von Foo von Ihrem Service-1-Proxy verwendet.
Haben Sie jedoch in Betracht gezogen, nur einen einzigen Dienst mit zwei Operationen zu hosten? Es würde dir viel Arbeit ersparen.
Edit: Sieh dir auch diesen Post an: Ссылка
Zuerst müssen Sie den [DataContract (Namespace="einige Namespaces hier")] für alle gängigen Service-Datentypen setzen, sonst werden bei der Generierung von WSDL und XSD Objekte aus zwei verschiedenen Namespaces generiert --- das ist absolut wesentlich . Der Namespace-Wert gilt nur für die Typen, die in der XSD und nicht in der WSDL definiert sind. XSD = Daten, WSDL = Service.
Die XSDs und WSDL und generiert, wenn und nur wenn Sie das META-Service-Verhalten festgelegt haben - fügen Sie dieses Verhalten hinzu und dann können Sie zu der URL navigieren. Die URL des META-Dienstverhaltens enthält dann eine Verknüpfung zu Ihren WSDLs und XSDs.
Ich verwende den folgenden Codeabschnitt, um Dienste in Windows-Diensten und nicht über IIS selbst zu hosten, gelten jedoch die gleichen Prinzipien.
%Vor%nach dem Hinzufügen Ihrer zwei Web-Referenzen:
<namespace-of-service-reference-2>.Foo
mit nur Foo
Dies sollte Ihr Problem beheben, da es den automatisch generierten Code für beide Serviceverweise erzwingt, dieselbe Klassendeklaration zu verwenden.
Tags und Links wcf c# xsd web-services wsdl