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 무시하고 대신 오류를 제공하지 않습니다.