消息合同可以扩展数据合同吗?

时间:2012-10-08 17:50:59

标签: c# wcf wcf-binding

我开发了一个WCF服务,它接受基于请求类型的请求和进程。但是,我遇到了更多的设计问题而不是任何事情。大多数请求和响应非常快速和简单,发送和接收的数据量很少,因此这对于标准缓冲传输模式非常有用。但是,有少数几种请求类型可能会返回(从服务到客户端)大量数据,在这种情况下,我必须将MaxRecievedMessageSize设置得非常高或切换到流传输模式。

我确信自己设置个别请求并为流式请求创建新的Contract / Bindings / etc是正确的方向。现在我面临的挑战是,我希望传递一个请求对象(保存有关请求的内容,其类型等),这是一个数据契约。但是,如果我要转换为流式传输模式,我有传递消息合同的限制。

我可以扩展数据合同并将扩展类称为消息合同吗?例如:

[DataContract]    
public class RequestObject

[MessageContract]
ExtendedRequestObject : RequestObject

如果我不能走这条路,那么确保架构仍然有意义的最佳方法是什么?我喜欢总是传递一个对象并能够对该对象进行验证,而不是有大量具有多个参数的方法/函数等?

1 个答案:

答案 0 :(得分:2)

我找不到来源,但这似乎很奇怪也是不可能的。如何处理基类的DataMembers?

继承似乎没必要,聚合如何:

[MessageContract]
class ExtendedRequestObject
{
    [MessageBodyMember]  RequestObject Request;

}