【问题标题】:Receive large object with WCF使用 WCF 接收大对象
【发布时间】:2011-10-18 05:31:08
【问题描述】:

我尝试通过 WCF 接收带有 XML 的大型对象。如果我设置maxStringContentLength={Default value},它不起作用。

它只在我增加maxStringContentLength 时有效,但它会降低性能。

在不增加maxStringContentLength的情况下有没有解决这个问题的办法?

【问题讨论】:

  • 你看过流媒体吗? Streaming Message Transfer - 如果我没记错的话,您还可以在流式传输时设置更高的限制,因为它不会先将所有内容读入缓冲区然后再发送它应该会表现得更好。

标签: c# .net asp.net wcf wcf-streaming


【解决方案1】:

简短的回答是(用于缓冲消息)。如果需要接收大字符串数据,需要增加reader quotas。您应该根据您希望允许的最大数据量适当地设置它们。

【讨论】:

  • 我使用的是transermode流式传输,但仍然需要设置maxStringContentLength =819200。否则会产生错误
【解决方案2】:

这是大多数 WCF 环境的代码异味。如果您要发送大量 XML,这通常意味着您没有使用 DataContract 来发送对象。

您还注意到您想要使用流式传输。如果是这种情况,那么读者配额不应该发挥作用,因为您传递的是一个流,其中包含您的数据而根本没有数据协定。

如果您使用缓冲区,则可以增加 ReaderQuotas 的大小,但这会以内存为代价。请记住,这些缓冲区是为您可以同时处理的每个传入 WCF 调用建立的,因此您可能会遇到麻烦。

【讨论】:

  • 我正在使用 transermode 流式传输,但仍需要设置 maxStringContentLength =819200 但这会占用内存。否则会产生错误
  • 除非您使用消息协定来传递流,否则您会将数据流式传输到固定大小的缓冲区中,但在您将完整消息放入缓冲区之前,您的实际代码不会触发。
  • 阅读 MSDN 上的这篇文章,了解有关使用 messageContract 和通过 WCF 传递流的更多信息。 msdn.microsoft.com/en-us/library/ms733742.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
相关资源
最近更新 更多