Frage

Ich versuche, einen Web-Service zu konsumieren angegebene WSDL durch einen WCF-Proxy svcutil.exe erstellen, aber die WSDL gibt an, dass einige der Operationen Parameter, die optional sind (minOccurs = „0“), zum Beispiel:

<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int" /> 

Leider hat der generierten Proxy mir nicht erlauben, die Werte nicht angeben (die Parameter sind nicht nullable), und es gibt keine „angegeben“ Felder als Teil des Aufrufs des Proxy anzuweisen, dass kein Wert gesendet werden soll.

Gibt es eine Möglichkeit svcutil zu verwenden, um einen Proxy zu generieren, die mir, dies zu tun erlauben würden?

(On a side note, bemerkte ich durch meine Forschung, die andere konnten diese zusätzlichen „angegeben“ Felder erzeugen, korrekt die „Dienstverweis hinzufügen“ Funktion verwenden, aber aus welchen Gründen auch immer Visual Studio scheint nicht erzeugen zu wollen der Proxy, nachdem ich den Verweis (nichts passiert danach))

hinzufügen

WSDL-Datei generiert Proxy

Befehl: svcutil http: // SAS- int.elluminate.com/site/external/adapter/default/v1/webservice.wsdl / interne /n:*,Elluminate.WebService.WebServiceProxy /o:WebServiceProxy.cs /config:App.config / nologo

War es hilfreich?

Lösung

Ich würde die Client-Proxy-Klasse von svcutil erzeugte erraten ein Feld / Eigenschaft namens meetingId vom Typ int hat - nicht wahr? Ja, das ist nicht-nullable - aber ich wette, dass Sie auch einen Booleschen Feld / Eigenschaft namens meetingIdSpecified haben - nur dann, wenn diese festgelegt ist, um den Service tatsächlich sehen es true wird; wenn Sie es nicht gesetzt ist, dann wird der Dienst nicht auf den Wert sehen, so ist es fast, als ob es in dem NULL.

Auch - Sie hat nicht angegeben Feld in Ihrem XSD nullable zu sein, entweder - Sie angegeben haben es optional zu sein. Um es auf NULL festlegbare zu machen, verwenden Sie diese Syntax hier:

<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int" 
            nillable="true" />

Sehen Sie das „nullable“ Attribut? Das ist der, verwendet zur Herstellung eines Feld wirklich nullable - Sie können jetzt einen Eintrag wie dies in Ihrem XML haben:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <meetingId xsi:nil="true" />
</root>

Marc

Andere Tipps

Verwenden Sie SvcUtil nicht, wenn es nicht für Sie arbeiten. Wenn der Dienst nicht sehr kompliziert, können Sie versuchen, die Service-Schnittstelle Schreiben von Hand, und verwenden Sie Channel <> Ihre Proxies zu erstellen.

Es ist ein Problem, weil minOccurs = „0“ erlauben sollten Sie nicht die ‚MeetingID‘ Wert zu emittieren, und die erzeugte Proxy es nicht gestattet.

Sie verbrauchen nur den Service, so dass Sie nicht die Kontrolle über die WSDL-Datei und Sie können nicht nillable = "true" in der WSDL-Datei, um optional in Ihrem Proxy zu haben 'MeetingID' hinzuzufügen.

Wenn Sie Ihre Proxy mit wsdl.exe erzeugen, und nicht svcutil.exe, werden Sie das zusätzliche Feld haben ‚meetingIdSpecified‘, die Sie, ob oder nicht wählen können, das Feld MeetingID auszusenden.

wsdl.exe http:///myservice?wsdl

Aber mit wsdl.exe Sie Ihren Dienst mit asp.net Web-Service konsumieren und nicht WCF.

ich denke, das fehlende Feld ein Fehler in svcutil.exe ist (für mich 4.0.30319.17929), denn wenn man mit der Option erzeugen / gewickelt:

svcutil.exe /wrapped http:///myservice?wsdl

.. dann werden Sie auch das Feld haben 'meetingIdSpecified' erzeugt!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top