1

C++クライアントがsvcutil+wsutilによって生成されたプロキシを使用して通信するWCFWebサービスがあります。新しいDataMemberを追加しましたが、次のようになります。

WS_READ_OPTION '2'、名前'GetMachineRequestDetailsResponse'、名前空間'M.NativeOM'の要素を読み取るときに、シリアル化の失敗が発生しました。WS_TYPE '26(0x1A)'、WS_FIELD_MAPPING '2'、名前'GetMachineRequestDetailsResult'、および名前空間'M.NativeOM'のフィールドを読み取るときに、シリアル化の失敗が発生しました。XMLリーダーが入力ソースを処理しているときに、行1、列796(0x31C)でエラーが発生しました。終了要素が期待されていました。; 名前が「UseForRun_SnapshotID 」で名前空間が「M.NativeOM」の開始要素が見つかりましたが、予期されていませんでした。;

データコントラクトに含まれるデータメンバーは、Order属性を使用して定義されます。

[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ファイルはそれらを正しい順序で表示します

  <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>

したがって、Order属性を使用すると、DataMembersは正しい順序になりましたが、私のクライアントは新しいDataMemberを無視するだけでなく、代わりにエラーを出します。

4

1 に答える 1

0

問題は、wsutil を使用してプロキシを作成するときに、/ignoreTrailingContent オプションが欠落していたことです。

于 2012-09-10T22:17:34.110 に答える