Während WCF und OperationContracts Verwendung habe ich die folgende Methode definiert:Wie kann ich WCF zwingen, WSDLs mit den erforderlichen Methodenparametern (minoccurs = "1") automatisch zu generieren?
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
Wenn diese von der WCF-Laufzeit auf eine WSDL übersetzt wird, es endet mit mit minOccurs = „0“ aufgelistet für die Parameter someId und message (und gibt anschließend einen Laufzeitfehler aus, wenn diese Parameter fehlen).
Wenn ich generieren einen Proxy verwenden SoapUI ich etwas, das wie folgt aussieht:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
Das ID-Feld in MyComplexType mit DataMemeber Attribut markiert mit IsRequired = "true "und wird somit als obligatorisch herausgestellt. Es ist offensichtlich ziemlich irreführend für die WSDL, anzugeben, dass ein Parameter optional ist, wenn dies nicht der Fall ist, aber ich sehe keine offensichtliche Möglichkeit, den OperationContract zu markieren, um WCF zu zwingen, diese Parameter nach Bedarf zu erkennen und verfügbar zu machen.
Ich bin ein wenig verblüfft es scheint nicht eine offensichtliche Möglichkeit, dies zu tun (Lesen intellisense/msdn/google). Oder ich werde blind und übersehe etwas Offensichtliches.
Irgendwelche Hinweise?
ich dieses Microsoft Connect Problem gefunden habe https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx ? FeedbackID = 482144, das bedeutet, dass dies möglicherweise nicht möglich ist. Welche saugt. – DavidWhitney
Mit weiteren Gedanken scheint es, als ob die Parameter als minoccurs = "0" aufgeführt sind, da die Typen selbst null sein könnten. Wenn also jemand eine Null liefert, würde es immer noch der Methode sig entsprechen. Noch hilft nicht für die Zwecke der WSDL-Generierung und die Definition eines Vertrags mit einer aufrufenden Anwendung/Organisation. – DavidWhitney
Die generierte WSDL ist nicht betroffen, da der Typ null sein kann (Referenztypen vs. Werttypen). Wenn ein Werttyp weggelassen wird, wird der Standardwert für diesen Werttyp verwendet. Siehe meine Antwort unten jedoch. – Thorarin