如何强制WCF使用所需的方法参数(minoccurs=";1";)自动生成WSDL?
在使用WCF和OperationContracts时,我定义了以下方法:如何强制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
[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中,可空类型往往被视为挑战。。。我想知道这是否也适用于你正在做的事情。假设我传递了几个必需的“字符串”参数。