WCF服务的最大参数大小

时间:2010-12-10 17:46:41

标签: c# wcf

拥有一个WCF服务(在IIS 6.0中托管),该服务从SAP获取XML源,可能需要处理数万(或更多)记录。

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

我担心参数大小的限制。在其他SO文章中,我正在读到,在web.config中maxRequestLength设置上提升httpRuntime将有助于此(我确信我必须增加发送超时,以及)。我还读到使用NetTcpBinding会有所帮助,虽然我不知道使用它或如何配置它的限制。

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

Pre-WCF,我们在远程链上使用了压缩接收器,其显着提高了性能(发送我们最大的数据集在20分钟后超时网页;添加压缩接收器后,数据集在大约20秒内穿过电线)(并且客户负责制作大型数据集,我们无法控制它们:P)。

如何最好地处理传递可能的100,000条记录,是否有适用于WCF的压缩接收器的概念?

TIA!
詹姆斯

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

默认情况下,WCF服务的参数大小限制为64KB。这是有充分理由的 - 该服务必须具有该大小的缓冲区(或者可能是同时调用者的几个缓冲区),并且如果该大小太大,则可能很容易使用大量请求的虚假服务器充斥服务器。把它跪下来。无论你有多少内存 - 在某些时候,它都会耗尽。

但是:好处是:就像几乎所有东西一样,你可以很容易地配置它。如果您在公司LAN环境(防火墙后面)中将大邮件大小与高度优化的NetTcpBinding结合使用,那么您应该既安全又可以在客户端和服务之间传输任何大小的文档。