小编Fra*_*ell的帖子

WCF MessageContract继承

我对WCF很新,只是有一个关于如何正确获取MessageContract继承的问题.我的设置的简化版本如下 - "基本"消息类型,然后是从其继承的另一个"测试"消息.

[MessageContract]
public abstract class BaseMessage
{ }

[MessageContract]
public class TestMessage : BaseMessage
{ }
Run Code Online (Sandbox Code Playgroud)

然后我在ServiceContract上有一个异步的OperationContract定义为:

[OperationContract(AsyncPattern = true)]
IAsyncResult BeginFindRequest(BaseMessage request, AsyncCallback callback, object asyncState);
Run Code Online (Sandbox Code Playgroud)

我得到的问题是在调用BeginFindRequest方法并传入请求参数的TestMessage实例时,WCF框架将TestMessage实例反序列化为服务/服务器端的BaseMessage.由于这被定义为抽象类,因此会导致以下错误:

"消息无法反序列化为MessageContract类型的BaseMessage,因为它没有默认的(无参数)构造函数."

从我可以在MessageContract继承上找到的有限信息,它似乎应该工作.

所以我的问题是 - 为了让这个工作,我错过了什么; 或者我应该在ServiceContract上专门针对该类型定义一个单独的OperationContract - 缺点是我最终可能会有许多额外的OperationContracts?

wcf inheritance operationcontract messagecontract

5
推荐指数
1
解决办法
4143
查看次数