【问题标题】:Can a Message Contract Extend a Data Contract?消息契约可以扩展数据契约吗?
【发布时间】:2012-10-09 02:24:25
【问题描述】:

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

我已经说服自己搁置单个请求并为流式请求创建新的合同/绑定/等是正确的方向。但是现在我面临的挑战是我喜欢传递一个请求对象(包含有关请求、其类型等的内容),这是一个数据合同。但是,如果我要转换为流传输模式,我会受到传递消息合同的限制。

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

[DataContract]    
public class RequestObject

[MessageContract]
ExtendedRequestObject : RequestObject

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

【问题讨论】:

  • 我 99.99% 确定我的直接问题的答案是否定的,我无法使用 MessageContract 扩展 DataContract。

标签: c# wcf wcf-binding


【解决方案1】:

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

而且继承似乎没有必要,聚合怎么样:

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

}

【讨论】:

  • 我喜欢聚合。我认为有一个带有 Body/Headers 的 MessageContract 就可以了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2011-07-07
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
相关资源
最近更新 更多