2013-01-03 5 views
0

WCF/Soap 서비스 작업을 구현하는 중이고 데이터 계약의 멤버 중 일부를 필요하지 않음 (IsRequired = false)으로 정의했습니다.C# .Net nullable DataMember 값이 제공되었는지 확인하는 방법

내 질문

  • 클라이언트가 계약 요소에 null 값을 제공합니다 ... 다음 두 가지 시나리오에 관련 (I : 전무 = "true"로) 클라이언트가 옵션을 제공하지 않는
  • 요소 (즉, 부분 계약서를 보낸다)

이 문제는 복합 및 null 가능 기본 유형 모두에 중요합니다. 내가 뭘 결정할 수 있습니다. 닷넷 시리얼 라이저는 null 두 시나리오에서, 그래서 내 질문에, 옵션 매개 변수가 SOAP 요청에 제공된 여부를 결정하는 방법을 권장 할 수 있습니다?

답변

0

한 가지 해결 방법은 부울 MemberSupplied 유형의 멤버를 데이터 계약에 추가하는 것입니다. 예 :

[DataContract] 
public class EmployeeSearchParams 
{ 
    [DataMember] 
    public Employee Manager {get; set;} 

    [DataMember] 
    public bool ManagerSupplied {get; set;} 
} 
+0

해결해 주셔서 감사합니다. 실제로 다른 문제와 관련된 다른 스레드에서 제안 된 것을 보았습니다. 필요하다면이 접근법을 사용할 수는 있지만 가능하면 다소 피하는 것이 좋습니다. 나는 그것을 피할 수 있다면 문제를 극복하기 위해 내 계약을 바꾸기를 꺼립니다. 어제 동료와 이야기하면서 Java는 문제에 대한 더 깔끔한 해결책을 가졌습니다. 이로써 직렬 기가 직렬화되지 않은 객체와 원시 요청에 대한 래퍼 (wrapper)를 제공합니다.이 래퍼는 선택적 요소가 제공되었는지 여부를 결정하는 속성을 제공합니다. – Jonna

+0

@Jonna 이것은이 접근법에 대한 저의 초기 느낌 이었지만, 제가 이것을 _ 과업이라고 부릅니다. 그러나 이것을 _cleaner_ 해결책으로 받아 들였습니다. 제 의견으로는 서버 측 원시 SOAP를 처리하는 것이 훨씬 더 복잡해집니다. 또한 클라이언트 측을 고려하십시오. 직선적 인 WCF 클라이언트 인 경우 클라이언트는 _call-by-call_ 기준으로 null을 보내거나 멤버를 생략할지 여부를 선택할 방법이 없습니다. –