私は 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 に逆シリアル化していることです。これは抽象クラスとして定義されているため、次のエラーが発生します。
「メッセージにはデフォルトの (パラメーターなしの) コンストラクターがないため、メッセージを MessageContract タイプの BaseMessage に逆シリアル化することはできません。」
MessageContract の継承に関する限られた情報から、それは機能するはずです。
私の質問は、これを機能させるために何が欠けているかです。それとも、そのタイプ専用の ServiceContract に個別の OperationContract を定義する必要がありますか?