将大文件传递到WCF服务

时间:2020-03-05 18:48:21  来源:igfitidea点击:

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

对于这种情况,最佳的端点设置是什么?我应该接受/返回信息流吗?我已经阅读了很多有关此内容的内容,但是没有人提供有关大文件不经常发生时的处理方法的指导。

解决方案

回答

我们可以遵循的一种模式是拥有一个异步服务,该服务可以处理共享文件系统位置上的文件:

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

回答

MSDN很好地描述了如何通过WCF启用流。

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

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

关于如何添加自定义行为扩展的真正好参考是:这里也记录了如何提供自定义配置(目前我不认为MSDN文档中的任何地方都讨论了某些内容)。