我遇到了WCF,流媒体和安全方面的问题并不是最大的问题,但我想让人们了解如何绕过它。
我需要允许客户端将文件上传到服务器,我允许使用BasicHttpBinding的transferMode =“StreamedRequest”功能。当他们上传文件时,我想以事务方式将此文件放在文件系统中,并使用文件的元数据更新数据库(我实际上使用的是Sql Server 2008的FILESTREAM数据类型,本机支持这一点)。我正在使用WCF Windows身份验证并将Kerberos凭据委派给SQL Server以进行所有数据库身份验证。
问题在于,作为我得到帮助的例外情况,“HTTP请求流不能与HTTP身份验证结合使用。”因此,对于我的上传文件服务,我无法传递Windows身份验证令牌以及我的消息调用。即使我没有使用SQL Server登录,我甚至无法通过Windows凭据识别我的呼叫客户端。
我暂时解决了这个问题,让上传方法不安全,并将文件转储到临时商店并返回定位器GUID。然后,客户端再次调用安全的非流服务,传递GUID,GUID使用Windows身份验证将文件从临时存储上载到数据库。
显然,这并不理想。从性能的角度来看,我正在对磁盘进行额外的读/写操作。从可扩展性的角度来看,(原则上,使用负载均衡器)无法保证我使用后续两个调用命中同一服务器,这意味着临时文件存储需要位于共享位置,这意味着不是可扩展的设计
有人能想出更好的方法来应对这种情况吗?就像我说的,这不是最大的交易,因为a)我真的不需要扩展这个东西,没有太多的用户,并且b)它不像这些上传/下载越来越多。但是,我仍然想知道我是否在这里错过了一个明显的解决方案。
谢谢, 丹尼尔