私はWCFをかなり新しくしており、MessageContractの継承が正しく機能するようにする方法について質問があります。私のセットアップの簡略化されたバージョンは、 "基本"メッセージタイプ、そしてそれから継承する別の "テスト"メッセージです。WCF MessageContract継承
[MessageContract]
public abstract class BaseMessage
{ }
[MessageContract]
public class TestMessage : BaseMessage
{ }
私は、その後のように定義のServiceContractの非同期OperationContractを持っている:
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginFindRequest(BaseMessage request, AsyncCallback callback, object asyncState);
私は取得しています問題は、BeginFindRequestメソッドを呼び出すときである、とリクエストパラメータにTestMessageインスタンスに渡しますWCFフレームワークは、TestMessageインスタンスをサービス/サーバー側のBaseMessageにdeserializeしています。これは抽象クラスとして定義されているとして、それは、次のエラーが発生:
"The message cannot be deserialized into MessageContract type BaseMessage since it does not have a default (parameterless) constructor."
私はMessageContract継承に見つけることができる限られた情報から、それだけで動作するはずと思われます。
私の質問は - これを機能させるためには何が欠けているのですか。または、おそらく、そのタイプのServiceContractに別々のOperationContractを定義する必要がありますか?欠点は、多くの追加のOperationContractsで終わる可能性があることです。
PS - 私はnet.tcpとNetDataContractSerializerを使用しています(両方のクライアント/サーバー上)。 –
ヘイフランク - "コードボタン"(010101010110のあるもの)を使用して、コードセクションをそのままフォーマットします。それらをうまくインデントし、シンタックスでそれらを強調表示します - 強くお勧めします! –
ありがとうMarcは、あなたがそれをどうやって行ったのか疑問に思いました! –