1

JAX-WSWebサービスと通信するためのWCFクライアントを作成しています。基本的にサービスとの通信は機能します。ただし、WCFクライアントによって生成されたXMLを調査する場合、いくつかの要素が欠落しています。すべてのプロパティが正しく生成され、コードで設定しました。私はWCFとWebサービス全般に慣れていないので、ここで何が間違っているのかを分析するのに問題があります。XMLで要素が欠落している原因は何ですか?これらの欠落しているすべてのプロパティに共通していることに気付いたのは、それらが列挙型であるということだけです。しかし、それ以外は何も見つかりませんでした。たとえば、国コードの列挙があります。エンティティには、その列挙型の3つのプロパティがあります。3つの関連要素のうち1つだけがXMLで生成されます。

ご協力いただきありがとうございます。

4

2 に答える 2

1

これは、WCF コントラクトが列挙型を異なる方法で処理するために発生する可能性が最も高いです。データ コントラクトの場合、クラスをDataContract属性でマークし、メンバーを属性でマークしDataMemberます。あまり知られていないのは、列挙型には、EnumMemberWCF が列挙型を適切にシリアル化するために使用する独自の属性があるということです。

Enumeration Types in Data Contractsと呼ばれる MSDN の記事があり、使用法がより詳細に説明されています。この記事のコード例は、列挙型のコントラクトがどのように見えるかを示しています。

[DataContract]
public class Car
{
    [DataMember]
    public string model;
    [DataMember]
    public CarConditionEnum condition;
}

[DataContract(Name = "CarCondition")]
public enum CarConditionEnum
{
    [EnumMember]
    New,
    [EnumMember]
    Used,
    [EnumMember]
    Rental,
    Broken,
    Stolen
}

彼らの例 (上に示したもの) では、必要に応じてデータ コントラクトの一部として列挙値のサブセットのみを設定できることに注意してください。

これに加えて、DataMember属性でタグ付けされていないプロパティは、ネットワーク経由でシリアル化されません。これは、シリアル化が WCF で機能することを確認するためのチェックリストです。

  1. クラスがDataContract属性でマークされていることを確認してください。
  2. プロパティが属性でマークされていることを確認してくださいDataMember
  3. 個々の列挙値がEnumMember属性でマークされていることを確認してください。
于 2012-10-25T15:14:40.963 に答える