我已经进入了一个为数据层使用WCF服务的项目。目前,当网格需要数据时,返回所有行并将结果绑定到网格,并将数据集填充到会话变量中以进行分页/排序/重新绑定。我们已经遇到了最大的消息大小问题,所以我认为是时候从fetch和cache转换为仅获取当前页面。
面子价值这看起来很容易,但是有一点小问题。允许用户在任何时候导出整个结果集。这意味着对于网格查看目的,获取当前页面很好,但是当他们想要导出时,我仍然需要调用所有数据。
这使我回到最大邮件大小问题。这种设置的推荐方法是什么?
我们目前正在使用wsHttpBinding ...
感谢您的帮助。
答案 0 :(得分:2)
我认为大文件的推荐方法是使用WCF流。我不确定您的方案的具体细节,但您可以将其作为起点:
答案 1 :(得分:2)
我可能会在你的情况下做这样的事情
使用“分页”GetData()方法创建服务 - 您可以在其中指定页面索引和页面大小作为附加参数。这应该为“常规”使用提供一个很好的干净界面,并且不应该达到maxMessageSize限制
创建一个可以发送所有数据的第二个服务(或方法) - 理想情况下,您可以在发送之前将其捆绑到ZIP文件或服务器上的某些内容中。如果该ZIP文件仍然太大,您可能想要检查WCF流以处理大文件,正如Andy已经指出的那样
maxMessageSizeLimit的存在是有充分理由的:避免拒绝服务攻击,其中WCF服务只会被大量消息淹没并因此瘫痪。如果可以的话,总是尽量记住这一点,不要只是将maxMessageSize升级到2 GB - 它可能会回来咬你: - )