Problem beim Generieren des WebService-Proxys mit SVCutil

8

In unserer Anwendung müssen wir mehrere WebServices konsumieren. Am Anfang haben wir nur die Menüoption "Add Service Reference" verwendet, um einen WCF-Proxy zu erstellen.

Der Assistent hat keinen DataContract generiert, sondern eine XML-serialisierbare Klasse. So weit, so schlimm, aber das war nicht der Mörder. Später bemerkten wir jedoch, dass wir Daten verloren haben, weil der generierte Proxy die Order-Eigenschaft bei der Zuweisung hinzufügte und dies Probleme verursachte.

Jetzt versuchen wir Proxy-Klassen aus der WSDL mit SVCUTIL.EXE zu erzeugen, aber wir bekommen die ganze Zeit die folgende Fehlermeldung:

%Vor%

Die Fehlermeldung in Englisch sieht so aus

"Das optionale WSDL-Erweiterungselement 'body' aus dem Namespace ' Ссылка wurde nicht behandelt."

Die ursprüngliche WSDL sieht folgendermaßen aus:

%Vor%

Und die (geschraubte) Proxy-Klasse sieht so aus:

%Vor%

Jede Hilfe wäre großartig.

    
Daniel Fabian 25.05.2009, 09:43
quelle

3 Antworten

23

Das von der WSDL verwendete Schema entspricht nicht der Schemareferenz des Data Contract Serializers.

Probleme:

  1. "Alle Elemente müssen für ein Schema qualifiziert sein, das von DataContractSerializer unterstützt wird".

    Ihr Schema lässt das ElementFormDefault-Attribut für das Tag aus, sodass der Standardwert "unqualifiziert" wirksam ist. Sie müssen dem & lt; schema & gt; das folgende Attributname / Wert-Paar hinzufügen: Element, damit der Data Contract Serializer (DCS) die lokalen Elemente / Typen auflösen kann.

    elementFormDefault="qualifiziert"

  2. maxOccurs und minOccurs Attribute in & lt; sequence & gt; Das Tag muss 1 oder nicht angegeben sein (Standard ist 1).

    Entfernen Sie daher maxOccurs="unbounded" in der & lt; sequence & gt;.

  3. Fügen Sie maxOccurs="unbounded" für die & lt; row & gt; Tag, um einen geschachtelten Sammlungsdatenvertrag zu erhalten, der für das DataSet-Feld generiert wurde.

    Zum Beispiel

    <xsd:element name="DataSet"> <xsd:complexType> <xsd:sequence> <xsd:element name="row" minOccurs="0" maxOccurs="unbounded"/>

an phu 30.05.2009, 03:19
quelle
0

Ich musste die Verwendung von "element" loswerden und stattdessen nur die "complexType" s verwenden.

Also habe ich die umschließenden Elemente auf den DataContracts entfernt und in den Nachrichten habe ich das type-Attribut anstelle des element-Attributs gesetzt. Jetzt funktioniert es, vielen Dank. :)

    
Daniel Fabian 04.06.2009 14:53
quelle
0

Hey, ich bin mir nicht sicher, wie du deine WSDL generiert hast, aber die Datensätze haben ein paar Kuriositäten.

Wenn ich meinen Proxy mit einem ds erzeuge, muss ich auf diese Assembly verweisen:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Data.dll

Prost, Stian

    
Stígandr 31.05.2012 10:23
quelle

Tags und Links