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