我有一个带有WCF服务的ASP.NET MVC3解决方案。当我从此WCF服务获得公司列表(超过2200条记录)时,出现错误:已超出传入邮件的最大邮件大小配额。
原因是在Web.Config文件中:maxBufferPoolSize和maxReceivedMessageSize是65536.我改为900000,现在我没有任何问题。
我的问题:maxBufferPoolSize和maxReceivedMessageSize的值为900000(900k)是否合理?我真的需要我的所有记录来分页数据。
子问题:直接在WCF服务中“分页”并返回所需的数据页面效率更高吗?值得吗?
感谢您的帮助。
答案 0 :(得分:1)
900k的邮件大小并非不合理。我建议运行一些检查,以确保它给你扩展的空间,例如。当你有4000条记录时,它仍然适用吗?我已经看到了2MB作为限制的其他建议,所以你很好。
根据您的意见,另一种方法是提供两种方法:
GetAllRecords()
returns all
GetSomeRecords(int limit)
returns a subset, plus a count of the total available.
您的客户端应用可以根据用户偏好选择要调用的方法。如果用户想要查看页面,请在客户端应用程序中调用GetAllRecords和paginate。
答案 1 :(得分:1)
MaxReceivedMessageSize应保持较小以避免DoS攻击。如果您的服务是在Intranet方案中,则应该可以大于默认值。如果它在公共内部网上,您需要权衡攻击的影响与要求分页的可用性影响。
maxbufferPool大小更难回答,因为它取决于您期望的并发请求数。试试这个解释
http://social.msdn.microsoft.com/Forums/en/wcf/thread/d6e234d3-942f-4e9d-8470-32618d3f3212/