2010-12-10 118 views
1

有一个WCF服务(托管在IIS 6.0中),该服务从SAP处理XML提要,并处理可能数以万计(或更多)的记录。WCF服务的最大参数大小

[OperationContract] 
[FaultContractAttribute(typeof (ArgumentException))] 
void ProcessSapRoles(XElement SapData); 

我很关心参数大小的限制。从其他SO文章中,我正在阅读的是,在web.config中设置httpRuntime设置上的maxRequestLength将有所帮助(我相信我将不得不增加发送超时)。我也读过使用NetTcpBinding会有所帮助,但我不知道使用这个或如何配置它的限制。

我想我可以让来电者拨打100,000个电话,每个记录一个,但我认为性能影响会很大。另外,另一方面,我必须查询现有记录以查看是否正在更新或添加记录,然后将更新发送回数据库。为一条记录的100,000个单独查询创建100,000个数据集,每个数据集似乎也都处于瘫痪状态。

预WCF,我们使用了一个远程链,其显著增加的性能(发送我们的最大的数据集进行了20分钟后超时网页压缩片;将所述压缩下沉之后,数据集被交叉的线在大约20秒内)(客户负责制作数据集,我们无法控制它们:P)。

如何最好地处理可能传递的100,000条记录,并且WCF中是否有任何等效的压缩接收器概念?

TIA!
James

+0

深入了解NetTcpBinding方法......我将在接下来的几天内挑选一个答案 – 2010-12-13 21:54:47

回答

1

默认情况下,WCF服务的参数大小限制为64KB。这是一个很好的理由 - 服务必须有一个这样大小的缓冲区(或可能有多个缓冲区,用于同时调用者),如果这个大小太大,可以很容易地用一个虚假的巨大请求来洪泛服务器,把它跪下来。无论你拥有多少内存 - 在某个时候,它都会耗尽。

但是:好处是:几乎所有东西都可以很容易地配置。如果您在企业LAN环境(防火墙后面)中组合大型邮件大小与高度优化的NetTcpBinding,则应该既安全又可以在客户端和服务之间传输几乎任何大小的文档。

+0

关于伪造请求的好处! – 2010-12-13 21:54:03

1

您是否考虑过使用Streaming in WCF来传输大数据?

在附注中,NetTcp绝对有帮助。原因是它默认使用Binary encoding。另一方面,Http默认使用Text encoding,这需要额外的空间。

+0

由于我传递XML数据,我真的会从二进制编码中获益吗?展望流媒体...... – 2010-12-10 18:34:58