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>
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Unfortunately it can’t be done using default WCF. There exist a few workarounds:
- A custom
RequiredParametersBehaviorattribute - 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.
Method 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.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0