【问题标题】:OutOfMemory exception when large number of records is sent from WCF to Silverlight当大量记录从 WCF 发送到 Silverlight 时出现 OutOfMemory 异常
【发布时间】:2012-11-03 07:51:55
【问题描述】:

我有一个 Silverlight 应用程序,我在其中调用 WCF 服务从数据库中获取数据。如果有少量记录,那么它工作正常,但如果有很多记录,那么它会抛出 System.OutOfMemory 异常。

我已在 WCF 错误日志文件中对其进行了跟踪。有什么方法可以压缩来自 WCF 到 Silverlight 应用程序的数据?

【问题讨论】:

  • 也许您应该编辑 wcf 服务的配置文件?如果你还没有这样做。
  • 感谢您的回复,但我已经这样做了。

标签: wcf silverlight gzip out-of-memory


【解决方案1】:

U 可以对 WCF 消息使用 IIS 动态压缩。 阅读下一个主题/文章:

Enabling dynamic compression

GZip compression with WCF hosted on IIS7

【讨论】:

  • 感谢您的回复,我已经在 IIS 中配置了 HTTP 压缩,但是当我放入 var request = HttpWebRequest.Create("localhost/RxReport/RXReports.aspx";); request.Headers["Accept"] = "application/json "; request.Headers["Accept-Encoding"] = "gzip, deflate"; 在我的 silverlight 应用程序中,如文章中所述,我收到以下错误“Silverlight 应用程序中的未处理错误必须使用适当的属性修改此标头” .你能给我一个示例,我如何在我的应用程序中使用 GZip 压缩。谢谢
【解决方案2】:

在您的服务网络配置中,在服务行为和端点行为中添加此项。然后它可以传输高达 2 GB 的数据。

 <dataContractSerializer maxItemsInObjectGraph="2147483647"/>

【讨论】:

  • 感谢您的回复,但我已经将此属性设置为最大限制,但我正在尝试将超过 500000 条记录从 Wcf 传输到 silverlight。
  • 我认为这是您可以通过 wcf 服务转移的最大金额。我建议您使用分页或线程机制来传输每 10,000 个数据。这就是我在我的项目中所做的。
  • 感谢您的回复,能否给我一个示例,我可以使用 gZip 压缩将数据从 wcf 传输到 silverlight。
【解决方案3】:

一次性传输 500,000 条(半百万)条记录对于您的系统来说太大了,无法处理。我还要说你的用户处理的太多了。

您应该将其分解为数据页,并且一次只返回几页。 Silverlight/WCF (RIAServices) DomainDataService 可以为您处理所有这些:

<riaControls:DomainDataSource QueryName="GetResults"
                              LoadSize="200"
                              PageSize="100"
                              AutoLoad="True"/>

您向页面添加一个分页器控件,以便在用户控制的数据页面中移动。

这使您的应用程序更具响应性,因为您每次只返回少量数据。一次性返回 500,000 条记录也很可能导致连接速度较慢的人超时。

我还建议您考虑过滤数据,以便只返回用户感兴趣的数据。

【讨论】:

  • 感谢您的回复,能否给我一个示例,我可以在其中使用 gZip 压缩将数据从 wcf 传输到 silverlight。
  • @user1796141 - 这与 gZip 压缩无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
相关资源
最近更新 更多