WCF:是否有一个属性可以使OperationContract中的参数变为必需的?

9

我使用 [DataMember(IsRequired=true)] 来使 DataContract 属性为必需。但是 OperationContract 参数似乎没有 IsRequired 选项。我该如何使它们为必填且不允许为空?

在 SoapUI 工具中,OperationContract 的参数似乎是可选的。但是这些参数永远不应该是可选或空的。

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; }
}

soapUI请求模板:

<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>
2个回答

4

1
谢谢。只是希望微软在WCF中处理好这个问题。 - Dieko

1

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

只需应用正常的防御性编程模式,在访问其属性之前检查引用类型即可。


真实。永远要做好准备迎接意想不到的情况。 - Dieko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接