将大文件传递给WCF服务

时间:2008-09-05 16:49:08

标签: wcf web-services

我们有一个加密服务,我们已经通过net.tcp公开了。大多数情况下,该服务用于加密/解密字符串。但是,我们时不时地需要加密大型文档(pdf,jpg,bmp等)。

此类场景的最佳端点设置是什么?我应该接受/退回流吗?我已经阅读了很多相关内容,但没有人就大文件不经常发生时该怎么做提供指导。

2 个答案:

答案 0 :(得分:4)

MSDN很好地描述了how to enable streaming over WCF

注意,如果客户端和服务器之间的链接需要加密,那么您需要“自己动手”加密机制。默认的net.tcp加密需要X.509证书,这些证书不适用于流,因为这种加密需要一次性处理整个消息而不是字节流。

反过来,这意味着您将无法使用默认WCF安全机制对客户端进行身份验证,因为身份验证需要加密。我所知道的唯一解决方法是在客户端和服务器上实现自己的自定义行为扩展来处理身份验证。

关于如何添加自定义行为扩展的一个非常好的参考是here:这也记录了如何提供自定义配置(我认为目前在MSDN文档中的任何地方都没有讨论过这个问题)。

答案 1 :(得分:1)

您可以遵循的一种模式是使用适用于共享文件系统位置上的文件的异步服务:

  1. 将要加密的文件放在共享位置
  2. 调用服务并告诉它加密文件,传递文件的位置和名称,以及客户端上回调服务的地址
  3. 该服务会对文件进行加密,并将加密后的副本放在共享位置(与未加密的位置相同或不同,无关紧要)
  4. 该服务将回叫客户端,提供加密文件的名称和位置
  5. 客户端可以检索加密文件