2012-10-11 5 views
7

나는 [DataMember(IsRequired=true)]을 사용하여 필요한 DataContract 속성을 만듭니다. OperationContract 매개 변수에는 IsRequired가없는 것 같습니다. Null을 허용하지 않으려면 어떻게해야합니까?WCF : OperationContract의 매개 변수를 필수로 만드는 특성이 있습니까?

OperationContract의 매개 변수는 SoapUI 도구에서 선택적으로 표시됩니다. 이것은 선택 적이거나 null이 아니어야합니다.

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> 

답변

4

불행히도 기본 WCF를 사용하여 수행 할 수 없습니다. 몇 가지 해결 방법이 존재합니다

를 사용

  • .

  • +0

    감사합니다. MS가 WCF에서 이것을 돌보고 싶다면. – Dieko

    1

    번호, 당신은 참조 유형 매개 변수에 값이 있는지 여부를 확인해야합니다 또는 null입니다.

    일반 방어 프로그래밍 패턴을 적용하고 속성에 액세스하기 전에 참조 유형을 확인하십시오.

    +0

    참. 예상치 못한 것을 항상 기대하십시오. – Dieko