在使用WCF和OperationContracts我已經定義了下列方法:如何強制WCF自動生成具有所需方法參數的WSDL(minoccurs =「1」)?
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
當這個被翻譯成由WCF運行時一個WSDL,它與一個minOccurs =「0」中列出的參數someId和messageData結束(並且如果這些參數丟失,則會引發運行時錯誤)。
如果我生成使用了SoapUI我得到的東西看起來像這樣的代理:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
在MyComplexType id字段被標記使用IsRequired =「真DataMemeber屬性「因此暴露爲強制性的。
WSDL指定一個參數是可選的,但是我看不出任何顯而易見的方式來標記OperationContract,迫使WCF根據需要識別並公開這些參數。
我有點困惑,似乎沒有一個明顯的方式來做到這一點(閱讀intellisense/MSDN /谷歌)。或者我會失明,忽視明顯的事物。
任何線索?
我發現這個Microsoft連接問題https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx ?FeedbackID = 482144這意味着這可能是不可能的。 這很糟糕。 – DavidWhitney 2009-09-17 12:55:37
隨着進一步思考,看起來好像參數被列爲minoccurs =「0」,因爲類型本身可能爲空,因此,如果有人提供了null,它仍然會匹配方法sig。 對於WSDL生成和定義與調用應用程序/組織的合同仍然沒有幫助。 – DavidWhitney 2009-09-17 13:00:14
生成的WSDL不受影響,因爲類型可能爲空(引用類型與值類型)。如果省略了值類型,則將使用該值類型的默認值。不過,請參閱下面的答案。 – Thorarin 2010-08-08 21:18:39