1

我们有许多现有的客户指向以下网址:

http://sub1.site.com/images/image1.jpg

/images 是一个虚拟目录,它指向该服务器上实际包含 image1.jpg 的目录。

我们正在将所有文件移出此目录并移至不会运行同一应用程序的单独服务器上。

该文件现在仅在以下位置可用:

http://sub2.site.com/image1.jpg

使请求 http://sub1.site.com/images/image1.jpg的客户获得现在位于http://sub2.site.com/image1.jpg的内容的最佳方法是什么?

几个要求:

  • 我们需要通过该 url 返回的实际内容 - 而不是 302 响应。
  • 我们无法修改 IIS 服务器配置 - 只有站点的 web.config
  • 同样,我们正在运行 asp.net 3.5

谢谢。

4

4 回答 4

1

不完全确定这是否可行,但您可以在旧站点上设置 URL 路由,以便所有请求都发送到处理程序,并且在该处理程序中,您可以执行 Web 请求以从其新位置获取文件。

我使用该过程的变体将图像 URL 映射到不同位置,并且我的处理程序执行一些数据库查询以获取映射关系并提供正确的图像。我不明白你为什么可以通过网络请求来获取图像。

于 2012-08-29T19:16:10.190 回答
0

如果您对服务器或服务器上游的任何内容有其他控制权,则可以使用 mod_proxy(或类似的 Windows/IIS 工具)拦截这些 URL 并将它们转发到另一台服务器并以真实请求进行响应。根据您的网络配置和可用服务器,这可能是最简单、性能最佳的解决方案。

可以将 IIS 配置为将请求转发到另一个 Web 服务器吗?on serverfault 有一个 IIS 7.5 解决方案的快速过程和链接。

于 2012-08-29T20:19:30.133 回答
0

由于您使用的是 IIS7,因此您可以使用内置的URL 重写模块

您需要一个入站和出站规则来将 \images\image1.jpg 更改为 \image1.jpg

它可能会非常复杂,但这应该很简单。

于 2012-08-29T19:41:05.670 回答
0

假设您可以将处理程序添加到您的站点(如将 DLL 添加到站点中的 /bin 目录)并且限制您不能发送 302 响应以获得更好的性能,那么您也可以编写一个自定义处理程序来获取所有与该 URL 模式匹配的请求,通过 Web 客户端代码从原始站点对 sub2.site 图像进行 Web 请求,然后从原始站点 sub1.site.com 将其返回。

有关创建和设置自定义处理程序的基础知识,请参阅如何使用 Visual C# .NET 创建 ASP.NET HTTP 处理程序。然后使用 HttpWebRequest 发出 sub2.site.com 的请求,如指南A Deeper Look at Performing HTTP Requests in an ASP.NET Page中所述。加上一些其他代码来处理错误、超时、以尽可能少的处理和内存使用来传递图像等。

根据两台服务器之间的响应时间/延迟,这可能会很慢,但它会满足您的所有要求。但是,如果将图像移动到站点 2 的目的是为了性能(CPU 或内存)或带宽限制,那么这种解决方案将抵消任何收益——实际上会使事情变得更糟。但是,如果他们因为其他业务或技术原因而被移动,那么这个解决方案可能仍然有用。

于 2012-08-29T19:51:12.307 回答