Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 通过WebService安全下载图像的最佳实践_Wcf_Image_Asp.net Mvc 3_Download_Wcf Security - Fatal编程技术网

Wcf 通过WebService安全下载图像的最佳实践

Wcf 通过WebService安全下载图像的最佳实践,wcf,image,asp.net-mvc-3,download,wcf-security,Wcf,Image,Asp.net Mvc 3,Download,Wcf Security,我目前正在构建一个ASP.NET MVC 3-WebApp,它可以处理大量图像,比如说每页多达100个。 目前,网络应用程序本身为图像提供服务。原因是,我想确保只有授权和登录的用户才能下载图像。这种方法会影响性能,因为一方面浏览器按顺序加载图像,另一方面扩展性不太好。 因此,我想介绍一个来自另一个主机的外部WCF Web服务,该服务提供图像,并且仅提供图像。这工作得很好,但目前我不知道如何使下载Url安全 在我的页面中,让我们说“www.imageviewer.com”,我希望有许多这样的图像标

我目前正在构建一个ASP.NET MVC 3-WebApp,它可以处理大量图像,比如说每页多达100个。 目前,网络应用程序本身为图像提供服务。原因是,我想确保只有授权和登录的用户才能下载图像。这种方法会影响性能,因为一方面浏览器按顺序加载图像,另一方面扩展性不太好。 因此,我想介绍一个来自另一个主机的外部WCF Web服务,该服务提供图像,并且仅提供图像。这工作得很好,但目前我不知道如何使下载Url安全

在我的页面中,让我们说“www.imageviewer.com”,我希望有许多这样的图像标签: [Image Tag]Source=“imageservice.imageviewer.com/Download/someID”[/Image Tag]

我知道我可以在下载Url中发送一些加密的安全信息,比如UserID或其他securitytoken,并对其进行处理。但这不会阻止用户(或其他用户)在其他浏览器中下载图像,而无需登录

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


有什么办法可以解决这个问题吗?

Web服务是新的正则表达式吗

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

请描述您认为Web服务将以何种方式使您的图像加载更快?这将带来更多的开销(XML(un)打包,添加另一层代码),而且由于Web服务与浏览器在请求图像时所做的事情相比,或多或少不是HTTP请求,因此您仍然会遇到浏览器的连接限制

浏览器实际上并没有按顺序加载图像,而是以相同的速率加载到同一域

这是一种更常见的方法,添加一些将使其速度更快。然后,您仍然可以使用存储在会话、cookie或标头中的信息来保护它


另一方面,如果您只想得到问题的答案,而不想得到友好的建议:您可以简单地使用一个验证程序来保护您的服务,您只需覆盖验证程序以根据您已知的用户凭据进行验证。

我已经测试过,从其他资源下载图像(无论它是Web服务还是其他任何资源)会带来“快点“用户体验。原因是,我认为,在浏览器完成当前页面的下载+渲染+JS处理之前,浏览器开始从不同的ressource下载图像。也许我完全错了。如果我懒洋洋地从不同的子域加载图像,如何共享会话信息?我唯一想到的是使用进程外会话或SqlServer会话。但是我想避免这样做。@StevenGrigoleit你的第一条评论是“不同的资源”,当它是另一个(子)域时,它会加载得更快,因为浏览器处理连接的方式,我在回答中加入了一个链接。此外,您可以在IIS中为来自同一网站的子域提供服务,因此它们将共享所有数据,如会话和配置(即连接字符串等)。