2012-10-11 7 views
7

Używam [DataMember(IsRequired=true)], aby uzyskać wymagane właściwości DataContract. Wydaje się, że nie ma niektórych wymagań IsRequired dla parametrów OperationContract. Jak mogę je ustawić i nie pozwolić na zerowanie?WCF: czy istnieje atrybut, który powoduje, że wymagane są parametry w OperationContract?

Parametr w OperationContract wydaje się być opcjonalny w narzędziu SoapUI. Chociaż nie może to być opcjonalne ani zerowe.

WCF Interfejs:

[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 prośba szablon:

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

Odpowiedz

1

nr Podobnie jak każdy zwykły sposób, będziesz musiał sprawdzić, czy parametry typu odniesienia mają wartość lub są null.

Po prostu zastosuj swoje normalne wzorce defensywne, sprawdzając typy referencji przed uzyskaniem dostępu do ich właściwości.

+0

Prawda. Zawsze oczekuj nieoczekiwanego. – Dieko

Powiązane problemy