当前位置 : 主页 > 大数据 > 区块链 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-22
在使用WCF和OperationContracts时,我定义了以下方法: [OperationContract] [FaultContract(typeof(ValidationFault))] [FaultContract(typeof(FaultExceptionExceptionDetail))] int DoSomething(int someId, MyComplexType messageData); 当
在使用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指定一个参数是可选的时,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

网友评论