2012-08-28 2 views
1

C++ 클라이언트가 svcutil + wsutil에 의해 생성 된 프록시를 사용하여 WCF 웹 서비스와 대화합니다. 나는 새로운 DataMember를 추가하고, 지금은 얻을 : WS_READ_OPTION으로 요소를 읽을 때새로운 WCF DataMember로 인해 직렬화가 실패했습니다.

직렬화 오류가 발생 '2'이름 'GetMachineRequestDetailsResponse'네임 스페이스 'M.NativeOM'; WS_TYPE '26 (0x1A) ', WS_FIELD_MAPPING'2 ','GetMachineRequestDetailsResult '및 네임 스페이스'M.NativeOM '을 사용하여 필드를 읽는 중 직렬화 실패가 발생했습니다. XML 리더가 입력 소스를 처리 할 때 1 열 796 (0x31C)에서 오류가 발생했습니다. 최종 요소가 예상되었다.; 'UseForRun_SnapshotID'및 네임 스페이스 'M.NativeOM'이있는 시작 요소가 발견되었지만 예상되지 않았습니다.

[DataMember(Order = 4)] 
     public int MachineID { get; set; } 
     [DataMember(Order = 5)] 
     public string MachineName { get; set; } 

     [DataMember(Order = 3)] 
     public bool IsReserved { get; set; } 

     [DataMember(Order = 13)] 
     public string ReservedBy { get; set; } 

     [DataMember(Order = 12)] 
     public MdMachineRequestType RequestType { get; set; } 

     [DataMember(Order = 0)] 
     public bool CommandIsAdmin { get; set; } 
     [DataMember(Order = 1)] 
     public string CommandLine { get; set; } 
     [DataMember(Order = 2)] 
     public int CommandTimeout { get; set; } 

     [DataMember(Order = 7)] 
     public string MoveToDb_ServerName { get; set; } 
     [DataMember(Order = 6)] 
     public string MoveToDb_DatabaseName { get; set; } 

     [DataMember(Order = 11)] 
     public int Reimage_OsID { get; set; } 
     [DataMember(Order = 8)] 
     public int Reimage_ImageID { get; set; } 
     [DataMember(Order = 9)] 
     public int Reimage_OptionTimeout { get; set; } 
     [DataMember(Order = 10)] 
     public string Reimage_OptionUserName { get; set; } 

     [DataMember(Order = 15)] 
     public int UseForRun_RunID { get; set; } 
     [DataMember(Order = 14)] 
     public bool UseForRun_DoCleanInstall { get; set; } 

     [DataMember(Order = 16)] 
     public int UseForRun_SnapshotID { get; set; } 

는 또한, 생성 된 XSD 파일이 그래서 넣어 DataMembers 주문 속성을 않았다 사용하여 올바른 순서

<xs:complexType name="MdMachineRequest"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="CommandIsAdmin" type="xs:boolean" /> 
     <xs:element minOccurs="0" name="CommandLine" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="CommandTimeout" type="xs:int" /> 
     <xs:element minOccurs="0" name="IsReserved" type="xs:boolean" /> 
     <xs:element minOccurs="0" name="MachineID" type="xs:int" /> 
     <xs:element minOccurs="0" name="MachineName" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="MoveToDb_DatabaseName" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="MoveToDb_ServerName" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="Reimage_ImageID" type="xs:int" /> 
     <xs:element minOccurs="0" name="Reimage_OptionTimeout" type="xs:int" /> 
     <xs:element minOccurs="0" name="Reimage_OptionUserName" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="Reimage_OsID" type="xs:int" /> 
     <xs:element minOccurs="0" name="RequestType" type="tns:MdMachineRequestType" /> 
     <xs:element minOccurs="0" name="ReservedBy" nillable="true" type="xs:string" /> 
     <xs:element minOccurs="0" name="UseForRun_DoCleanInstall" type="xs:boolean" /> 
     <xs:element minOccurs="0" name="UseForRun_RunID" type="xs:int" /> 
     <xs:element minOccurs="0" name="UseForRun_SnapshotID" type="xs:int" /> 
    </xs:sequence> 
    </xs:complexType> 

보기에 표시하십시오 datacontract에서와

내 데이터 멤버 주문 속성을 사용하여 정의됩니다 올바른 순서로 내 클라이언트가 그냥 새 DataMember 무시하고 대신 오류를 제공하지 않습니다.

답변

0

문제는 내가 wsutil을 사용하여 프록시를 생성 할 때/ignoreTrailingContent 옵션이 누락되었습니다.

관련 문제