如何强制WCF使用所需的方法参数(minoccurs=";1";)自动生成WSDL?

如何强制WCF使用所需的方法参数(minoccurs=";1";)自动生成WSDL?,wcf,soap,wsdl,soa,Wcf,Soap,Wsdl,Soa,在使用WCF和OperationContracts时,我定义了以下方法: [OperationContract] [FaultContract(typeof(ValidationFault))] [FaultContract(typeof(FaultException<ExceptionDetail>))] int DoSomething(int someId, MyComplexType messageData); [运营合同] [FaultCon

在使用WCF和OperationContracts时,我定义了以下方法:

    [OperationContract]
    [FaultContract(typeof(ValidationFault))]
    [FaultContract(typeof(FaultException<ExceptionDetail>))]
    int DoSomething(int someId, MyComplexType messageData);
[运营合同]
[FaultContract(类型(ValidationFault))]
[FaultContract(类型(FaultException))]
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>


1.
1.

MyComplexType中的id字段使用IsRequired=“true”标记为DataMemeber属性,因此公开为必填项

WSDL指定一个参数是可选的,而它不是可选的,这显然是非常误导人的,但是我看不到任何明显的方法来标记OperationContract以强制WCF根据需要识别和公开这些参数

我有点困惑,似乎没有一个明显的方法可以做到这一点(阅读intellisense/msdn/google)。或者我会失明,忽略一些显而易见的事情


有什么线索吗?

检查MyComplexType是否标记有[DataContract]属性

对于我自己的WCF契约,我发现minOccurs=1不会在生成的wsdl中显示IsRequired=true,直到契约中涉及的整个对象链被标记为minOccurs=1。

我刚刚写了一篇关于这个主题的文章,因为我自己上周遇到了这个问题。 它解释了如何修改WCF在运行时生成的元数据

除了下载源文件之外,您只需要向合同定义中添加一个属性。像这样:

[ServiceContract]
[RequiredParametersBehavior]
public interface ICalculatorService
{
    [OperationContract]
    int Add(int firstValue, int secondValue);
}

这里有一篇博文对此做了更详细的解释:

我发现了Microsoft Connect的这个问题,这意味着这可能是不可能的。这太糟糕了。进一步考虑,似乎参数被列为minoccurs=“0”,因为类型本身可能为null,因此,如果有人提供null,它仍然与方法sig匹配。对于生成WSDL和定义与调用应用程序/组织的契约,仍然没有帮助。生成的WSDL不会受到影响,因为类型可能为null(引用类型与值类型)。如果省略值类型,将使用该值类型的默认值。请看下面我的答案。有趣的方法。您能告诉我这是否适用于所有类型(按引用封送和按值封送)?我知道,在生成的xsd中,可空类型往往被视为挑战。。。我想知道这是否也适用于你正在做的事情。假设我传递了几个必需的“字符串”参数。