首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何强制WCF使用所需的方法参数(minoccurs="1")自动生成WSDL?

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

Stack Overflow用户
提问于 2009-09-17 12:41:07
回答 2查看 11.7K关注 0票数 16

在使用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)。否则我就会盲目忽略一些显而易见的东西。

有什么线索吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-09 05:00:41

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

除了下载源文件之外,您只需要向您的契约定义添加一个属性。如下所示:

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

以下是更详细地解释它的博客文章:Controlling WSDL minOccurs with WCF

票数 18
EN

Stack Overflow用户

发布于 2010-07-08 05:27:09

检查是否用DataContract属性标记了MyComplexType。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1438623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档