Asp.net WCF:是否有属性使OperationContract中的参数成为必需的?

Asp.net WCF:是否有属性使OperationContract中的参数成为必需的?,asp.net,wcf,soapui,datamember,operationcontract,Asp.net,Wcf,Soapui,Datamember,Operationcontract,我使用[DataMember(IsRequired=true)]使DataContract属性成为必需的。对于OperationContract参数,似乎不需要一些ISR。如何使它们成为必需的,而不允许为空 OperationContract中的参数在SoapUI工具中似乎是可选的。尽管这不能是可选的或空的 WCF接口: [OperationContract] IsClientUpdateRequiredResult IsClientUpdateRequired(IsClientUpdateRe

我使用
[DataMember(IsRequired=true)]
使DataContract属性成为必需的。对于OperationContract参数,似乎不需要一些ISR。如何使它们成为必需的,而不允许为空

OperationContract中的参数在SoapUI工具中似乎是可选的。尽管这不能是可选的或空的

WCF接口:

[OperationContract]
IsClientUpdateRequiredResult IsClientUpdateRequired(IsClientUpdateRequiredInput versie);

...

[DataContract]
public class IsClientUpdateRequiredInput
{
    [DataMember(IsRequired=true)]
    public string clientName { get; set; }
    [DataMember(IsRequired = true, Order = 0)]
    public int major { get; set; }
    [DataMember(IsRequired = true, Order = 1)]
    public int minor { get; set; }
    [DataMember(IsRequired = true, Order = 2)]
    public int build { get; set; }
    [DataMember(IsRequired = true, Order = 3)]
    public int revision { get; set; }
}
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" xmlns:pir="http://schemas.datacontract.org/2004/07/PirIS.Web.WCF.InputClasses">
   <soap:Header/>
   <soap:Body>
      <tem:IsClientUpdateRequired>
         <!--Optional:-->
         <tem:versie>
            <pir:clientName>?</pir:clientName>
            <pir:major>?</pir:major>
            <pir:minor>?</pir:minor>
            <pir:build>?</pir:build>
            <pir:revision>?</pir:revision>
         </tem:versie>
      </tem:IsClientUpdateRequired>
   </soap:Body>
</soap:Envelope>
soapUI请求模板:

[OperationContract]
IsClientUpdateRequiredResult IsClientUpdateRequired(IsClientUpdateRequiredInput versie);

...

[DataContract]
public class IsClientUpdateRequiredInput
{
    [DataMember(IsRequired=true)]
    public string clientName { get; set; }
    [DataMember(IsRequired = true, Order = 0)]
    public int major { get; set; }
    [DataMember(IsRequired = true, Order = 1)]
    public int minor { get; set; }
    [DataMember(IsRequired = true, Order = 2)]
    public int build { get; set; }
    [DataMember(IsRequired = true, Order = 3)]
    public int revision { get; set; }
}
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" xmlns:pir="http://schemas.datacontract.org/2004/07/PirIS.Web.WCF.InputClasses">
   <soap:Header/>
   <soap:Body>
      <tem:IsClientUpdateRequired>
         <!--Optional:-->
         <tem:versie>
            <pir:clientName>?</pir:clientName>
            <pir:major>?</pir:major>
            <pir:minor>?</pir:minor>
            <pir:build>?</pir:build>
            <pir:revision>?</pir:revision>
         </tem:versie>
      </tem:IsClientUpdateRequired>
   </soap:Body>
</soap:Envelope>

?
?
?
?
?

否。与任何常规方法一样,您需要检查引用类型参数是否有值或是否为
null


只需应用常规的防御编程模式,在访问引用类型的属性之前检查它们。

不幸的是,使用默认WCF无法完成此操作。存在一些变通办法:

  • 自定义属性
  • 使用企业库中的

但是,当输入参数为null时,您可以实现FaultContract并抛出错误。

谢谢。真希望MS在WCF中处理好这件事。总是期待意外。