2013-12-18 1 views
0

메서드에 대한 유일한 매개 변수로 미리 정의 된 개체를 수신하는 하나의 메서드로 구성된 알림 수신기 웹 서비스를 구축 중입니다. 이 개체와 해당 구성 요소 개체가 정의 된 보낸 사람의 API에 대한 서비스 참조가 있고 서비스 참조의 자동 생성 코드에서 대부분 또는 모든 개체가 System.ComponentModel.INotifyPropertyChanged를 구현합니다. 따라서, 각각이 같은 내 WSDL에서 보여주는하여 PropertyChanged 회원이 있습니다 이러한 개체에서 INotifyPropertyChanged를 구현해야하는 이유SOAP에 PropertyChanged 노드가 없을 때 INotifyPropertyChanged 객체의 역 직렬화가 실패하는 이유는 무엇입니까?

<xs:complexType name="DocuSignEnvelopeInformation"> 
    <xs:sequence> 
     <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System.ComponentModel" name="PropertyChanged" nillable="true" type="q1:PropertyChangedEventHandler"/> 
     ... 
    </xs:sequence> 
</xs:complexType> 

나도 몰라, 그리고이하여 PropertyChanged 요소는 호출 알림 서비스가 전송되지 않습니다 내 리스너 서비스가 필요합니다. PropertyChanged에는 nillable = "true"속성이 있기 때문에 정상적으로 처리되어야합니다. 그러나 어떤 이유로 PropertyChanged 특성이 있어야한다는 오류가 발생할 때마다 : "메시지를 deserialize하려고 시도하는 동안 예외가 발생했습니다. 매개 변수 http://schemas.datacontract.org/2004/07/MyNamespace:DocuSignEnvelopeInformation을 역 직렬화하려고 시도하는 동안 오류가 발생했습니다. InnerException 메시지가 'Error in line 5 position 2162. 네임 스페이스 'http://schemas.datacontract.org/2004/07/MyNamespace'의 'EndElement' 'DocuSignEnvelopeInformation'이 필요하지 않습니다. 예상되는 요소 'PropertyChanged'. '자세한 내용은 InnerException을 참조하십시오. "

nillable로 표시된 경우 왜 'PropertyChanged'요소가 필요합니까? 내가 읽고있는 것으로부터, nillable은 속성이 XML에서 선택적이라는 것을 의미합니다. 이것은 사실이 아닌가?

답변

0

이 질문에 대한 완전한 대답은 아니지만 제 웹 서비스 메서드에 here과 같이 XmlSerializerFormat 특성을 적용하면이 문제가 사라졌습니다. 기본 DataContractFormat은이 오류가 발생한 몇 가지 문제를 발생 시켰습니다. nillable이 true 일 때 PropertyChanged가 필요하다는 것은 여전히 ​​나에게 이해가 가지 않는다. 그러나 이것을 찾는 모든 사람에게 가치있는 일이 될 수 있도록 XmlSerializerFormat은 기본 DataContractFormat에 의해 발생한 다른 문제뿐만 아니라이 문제를 해결했습니다.