WCF では、データ コントラクト クラスは相互に継承できますか? 質問する

WCF では、データ コントラクト クラスは相互に継承できますか? 質問する

WCF サービスには、[DataContract] 属性を持つ 2 つのクラスがあります。これらのクラスの 1 つは他のクラスと "is-a" 関係にあるため、クラス B はクラス A から継承できます。ただし、どちらも [DataContract] 属性で示されるこれらの 2 つのクラス間の継承を構成すると、サービスのテスト時にメタデータが読み込まれません。

これは WCF で可能ですか? 別の属性が欠けているのでしょうか?

[DataContract]
public class A
{        
    [DataMember]
    public MyCustomType AValue1{ get; set; }

    [DataMember]
    public MyCustomType AValue2 { get; set; }
}

[DataContract]
public class B: A
{       
   [DataMember]
   public double BValue1{ get; set; }

   [DataMember]
   public double BValue2 { get; set; }
}

注: カスタム タイプもデータ コントラクトを使用して定義されます。

アップデート: 以下はエラーです:

エラー: メタデータを取得できませんhttp://localhost:8002/GISDataServices/mexアクセスできる Windows (R) Communication Foundation サービスの場合は、指定されたアドレスでメタデータの公開が有効になっていることを確認してください。メタデータの公開を有効にする方法については、次の MSDN ドキュメントを参照してください。http://go.microsoft.com/fwlink/?LinkId=65455.WS-メタデータExchange エラー URI:http://localhost:8002/GISDataServices/mexメタデータに解決できない参照が含まれています: 'http://localhost:8002/GISDataServices/mex'。Receivera:InternalServiceFault内部エラーのため、サーバーは要求を処理できませんでした。エラーの詳細については、サーバーで IncludeExceptionDetailInFaults (ServiceBehaviorAttribute または <serviceDebug> 構成動作のいずれかから) をオンにして例外情報をクライアントに返すか、Microsoft .NET Framework 3.0 SDK ドキュメントに従ってトレースをオンにして、サーバーのトレース ログを調べてください。HTTP GET エラー URI:http://localhost:8002/GISDataServices/mexダウンロード中にエラーが発生しました 'http://localhost:8002/GISDataServices/mex'。リクエストは HTTP ステータス 400: 不正なリクエストで失敗しました。

更新2:以下の私の回答をご覧ください。

ベストアンサー1

はい、ただし、派生クラスの型で構築する [KnownTypeAttribute] を使用して基本クラスを装飾する必要があります。例:

[DataContract]
[KnownType(typeof(B))]
public class A
{
   [DataMember]
   public string Value { get; set; }
}

[DataContract]
public class B : A
{
   [DataMember]
   public string OtherValue { get; set; }
}

おすすめ記事