Freigabe von WSDL-Typen ohne XSD

9

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 ...

%Vor%     
Ilya Kozhevnikov 23.04.2013, 09:08
quelle

3 Antworten

1

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: Ссылка

    
tom redfern 24.04.2013 14:41
quelle
1

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%     
Derek Nigel Bartram 01.05.2013 09:18
quelle
1

nach dem Hinzufügen Ihrer zwei Web-Referenzen:

  1. Doppelklicken Sie auf die zweite Webservice-Referenz
  2. Navigieren Sie im Objektbrowser zur Definition von Foo
  3. Klicken Sie mit der rechten Maustaste auf Foo und wählen Sie Gehe zu Definition
  4. lösche die Definition für die Klasse Foo
  5. fügen Sie eine using-Anweisung für den Namespace von webservice one
  6. hinzu
  7. finde und ersetze alle Instanzen von <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.

    
Charles Lambert 06.05.2013 21:13
quelle

Tags und Links