2012-02-15 73 views
0

我目前正在构建一个处理大量图像的ASP.NET MVC 3-WebApp,可以说每页最多100个。 目前WebApp本身为图像提供服务。原因是,我想确保只有经过授权和登录的用户才能下载图像。这种方法受到性能的影响,因为一方面浏览器按顺序加载图像,另一方面这个缩放比例不是很好。 因此,我想介绍一个来自另一台主机的外部WCF-WebService,它服务于图像并且仅提供图像。这工作得很好,但目前我不知道如何使下载网址安全。通过WebService安全图像下载的最佳实践

在我的网页可以说“www.imageviewer.com”我想有很多像这样的图像标签: [Image-Tag] Source =“imageservice.imageviewer.com/Download/someID”[/ Image - 标签]

我知道我可以发送一些加密的安全信息,在用户名或其他SecurityTokens下载Url,并做一些处理。但这并不妨碍用户(或其他用户)可以在另一个浏览器中下载图像,而无需登录。

我想要一个基于会话的解决方案。在登录到WebApp后,只有使用有效的会话,浏览器才能从WebService下载图像。

任何想法如何解决这个问题?

回答

1

webservices是新的正则表达式吗?

有些人在遇到问题时会想“我知道,我会用web服务”。现在他们有两个问题。

请描述您认为web服务如何加快您的图像加载速度?将会有更多的开销(XML(un))打包,增加另一层代码),并且由于web服务不像HTTP请求那么多,所以当你请求一个图像时,你的浏览器仍然会遇到浏览器的限制连接。

浏览器并没有真正顺序加载图像,而是以about two to eight at a time的速率加载到同一个域。

Loading the images from different subdomains是一个比较常见的方法,并且增加一些lazy loading会加快它的速度。然后,您仍然可以使用会话,Cookie或标题中存储的信息保护它。

如果,在另一方面,就是想回答你的问题,没有友好的建议:你可以简单地用Custom User Name and Password Validator,在那里你只需覆盖验证来验证您已知的用户凭据保护您服务。

+0

我测试过从其他资源下载图像(不管它是否是web服务或曾经)会给用户带来更快的用户体验。原因是,我认为,在浏览器完成当前页面的下载+渲染+ JS处理之前,浏览器开始从不同的资源下载图像。也许我完全错了。 – 2012-02-15 09:18:46

+0

如果我懒加载来自不同子域的图像,如何共享会话信息?我想到的唯一想法是使用Out-Of-Process或SqlServer会话。但我想避免这样做。 – 2012-02-15 09:24:30

+0

@StevenGrigoleit你的第一条评论指出“不同的资源”,当它是另一个(子)域时,它会加载得更快,因为浏览器处理连接的方式,其中我在我的答案中加入了一个链接。此外,您可以从IIS中的同一网站提供子域名,以便他们共享所有数据,例如会话和配置(即连接字符串和whatnot)。 – CodeCaster 2012-02-15 12:18:16