在使用WCF和OperationContracts时,我定义了以下方法:
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
当WCF运行时将其转换为WSDL时,它最终会为参数someId和messageData列出minoccurs=“0”(如果缺少这些参数,则会引发运行时错误)。
如果我使用SoapUI生成代理,我会得到如下结果:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
MyComplexType中的id字段使用IsRequired=“true”标记为DataMemeber属性,因此公开为必填项。
WSDL指定一个参数是可选的,而它不是可选的,这显然是非常误导人的,但是我看不到任何明显的方法来标记OperationContract以强制WCF根据需要识别和公开这些参数。
我有点困惑,似乎没有一个明显的方法可以做到这一点(阅读intellisense/msdn/google)。或者我会失明,忽略一些显而易见的事情。