2010-04-12 103 views
1

在我们的项目中,我们想要查询文档管理系统中的特定文档或电影。 dms返回包含文档位置的URL(例如:http://mydomain.myserver1.share/mypdf.pdfhttp://mydomain.myserver2.share/mymovie.avi)。将网址暴露给webservice

我们希望将文档公开给互联网用户和内部网用户。所请求的文件可能很大(大视频文件)。

我们的结构是这样的:

请求是这样:webapp1 - > webapp2的 - > webapp3 - > DMS

响应是这样:DMS - > webapp3 - > webapp2的 - > webapp1

webapp1可以在互联网上。

我一直在想如何从dms中混淆真实的URL,由于安全问题。我已经看到其他web应用程序的实现,通过为请求的文档创建一个特定于会话和用户的临时文件来使pdf URL受到阻碍。所以其他用户不能轻易猜测其他用户的文档名称。

我的问题:有没有一种模式可以将公司/用户可触发的数据暴露给公众?

我们的开发是在C#3.5。

+0

在你的架构,是webapp1调用DMS,或直接暴露URI? – 2010-04-12 13:55:48

+0

Webapp 1是原始调用者,webapp2是一个具有类型化的特定合同作为输入的流程服务。 然后,Webapp2将此类型的requestschema转换为由webapp3(使用键值对)公开的无类型请求模式。 Webapp3是一个带有无类型的常规键值模式的WCF平台服务,并且正在调用dms并等待来自dms的答案。 – 2010-04-12 14:07:34

回答

2

处理它的最简单方法是创建一个ashx文件(或其他创建URL的方式)并使其成为pdf。既然WCF支持REST,你也可以通过它来做到这一点。只需将pdf加载到内存中,并将字节内容压入响应流。

或者,你可能想看看到这些:

http://www.microsoft.com/forefront/edgesecurity/isaserver/en/us/

http://www.isapirewrite.com/

+0

这不是我们想要的。将数据推入内存是每台服务器的内存负载巨大的原因,因为一秒钟内有很多很多请求,数据必须在消耗之前通过很多webapps传播。我们希望找到一种方法,以便我们可以安全地向呼叫者公开一个URL,以便其他呼叫者无法通过URL猜测获取相同的数据 – 2010-04-12 14:00:05

+0

要提供pdf,服务器将不得不以某种方式将其加载到内存中。它必须将它推送给客户。无论你加载到内存中,还是让IIS为你做,它都会发生。 – kemiller2002 2010-04-12 14:27:09

+0

dms还可以通过url公开其内部文件位置。但我们不想将这个“内部”位置向公众公开。 WCF服务必须复制或以字节数组形式加载文件...但在此之后,文件必须再次发布为新的URL位置,该位置必须仅由请求它的会话提供。 – 2010-04-13 07:12:42