Windows服务将文件发送到Web Service瓶颈

时间:2013-12-03 16:52:44

标签: c# wcf web-services

我有一个监视目录的Windows服务,每当它检测到新文件时,它都会将该文件发送到我的Web服务进行处理。我现在已经注意到,使用Web服务请求发送文件变得有点瓶颈,所以我试图弄清楚替代方案是什么?

我想过让Windows服务直接进行处理(我理想情况下),但这不是一个选择。使用WCF会更好吗?在90%的部署中,Web Service与Windows服务位于同一服务器上,但有10%位于不同服务器上。只是不确定这里最好的方法是什么......

编辑:我将文件作为byte []发送到Web服务,这是我想以某种方式加速。所以我的问题是,使用其他方法有助于加快速度,例如使用WCF和不同的协议吗?我知道总是有开销,但试图尽量减少这种情况。

1 个答案:

答案 0 :(得分:2)

WCF&绑定:更改为WCF可提供多种绑定,可以更有效地在LAN中传输数据,例如: NetTcpBinding或命名管道(仅限本地)。因此,如果您不想在应用程序中引入更大的更改,那么使用WCF是一个很好的步骤。

混合方法: 但是,至少对于在同一台计算机上托管两个组件的90%部署加速的最佳方法是在这些情况下删除进程边界。如你所说,你已经考虑过了。因此,如果放弃这个想法的原因是10%需要分布式安装的部署:通过使用具有本地处理实现的接口和用于远程传输的实现,您可以实现支持两者的可配置方法场景(90%非常高效,10%至少不像以前那样慢)。

缩小数据大小 另一种显而易见的加速方法是在将文件内容传输到服务之前过滤或压缩文件内容。

文件路径而不是内容: 据我了解您的环境,托管服务的计算机至少彼此靠近(LAN,没有防火墙问题,......)。因此,将文件内容传输到服务,但是通知服务文件路径并让Web服务直接访问文件也可能是一个可行的选择。虽然不是一个非常漂亮的方式,有一定的缺点(例如,Web服务的帐户必须能够访问该文件,路径也必须可以从Web服务访问),您至少可以摆脱文件的低效传输和使用为文件访问而构建的协议替换它。此外,在两个服务在同一台机器上运行的90%的安装中,Web服务将进行非常快速的本地文件访问。

相关问题