在使用WCF和OperationContracts时,我定义了以下方法: [OperationContract] [FaultContract(typeof(ValidationFault))] [FaultContract(typeof(FaultExceptionExceptionDetail))] int DoSomething(int someId, MyComplexType messageData); 当
          [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指定一个参数是可选的时,WSDL显然是非常误导的,但是我看不到任何明显的方法来标记OperationContract,以强制WCF根据需要识别和公开这些参数.
我有点困惑,似乎没有明显的方法这样做(阅读intellisense / msdn / google).或者我会失明,俯瞰一些明显的东西.
任何线索?
我刚刚写了一个关于这个问题的 Blog post,因为我上周遇到了这个问题.它解释了如何修改WCF在运行时生成的元数据.
除了下载源文件,您只需要在合同定义中添加一个属性.像这样:
[ServiceContract]
[RequiredParametersBehavior]
public interface ICalculatorService
{
    [OperationContract]
    int Add(int firstValue, int secondValue);
} 
 这是博客文章,更详细地解释了:Controlling WSDL minOccurs with WCF
