WCF: is there an attribute to make parameters in the OperationContract required?

家住魔仙堡 提交于 2019-11-28 03:32:51

问题


I use [DataMember(IsRequired=true)] to make the DataContract properties required. There doesn't seem to be some IsRequired for the OperationContract parameters. How do I make them required and not allow null?

The parameter in of OperationContract appears to be optional in SoapUI tool. Though this must never be optional or null.

WCF Interface:

[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 request template:

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

回答1:


Unfortunately it can't be done using default WCF. There exist a few workarounds:

  • A custom RequiredParametersBehavior attribute
  • Using the Validation Application Block from the Enterprise Library and associate a ruleset to your method

You can however implement a FaultContract and throw a fault when the input parameter is null.




回答2:


No. Just like any regular method, you'll need to check whether reference type parameters have a value or are null.

Just apply your normal defensive programming patterns, checking reference types before accessing their properties.



来源:https://stackoverflow.com/questions/12836534/wcf-is-there-an-attribute-to-make-parameters-in-the-operationcontract-required

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!