我们正在开发一个通过 Internet 上传大文件的应用程序。DotNetZip 压缩前的文件大小约为 18GB,压缩后约为 4GB。文件通过安全 ftp 从客户端机器传输到目标服务器机器没有任何问题。
然后客户端调用目标服务器主机托管的.Net网络服务,将文件从ftp根目录复制到存储目录,计算文件哈希,调用DotNetZip解压文件。
当承载 Web 服务的客户端计算机和目标服务器计算机都在 Intranet 中时,Web 服务运行良好。
但是,当使用相同的客户端机器,但在 Internet 上托管 Web 服务的另一台生产目标服务器机器时,在复制、散列和解压缩 4GB 文件时,Web 服务会出现“线程被中止异常”。
两台服务器机器都是带有 SP2 的 Windows 2003 服务器,安装了相同的组件,具有相同的 IIS ver6.0,并且配置相同以使用 ASP .Net 2.0。我们将 web.config、machine.config、MetaBase.xml 从 Intranet 服务器机器复制到 Internet 服务器机器。
我们更改了: 1. 客户端代码:代码 7200000 中的 Web 服务代理超时 2. 服务器机器 web.config 文件:(1)。(2)。3.服务器机器machine.config文件:(1)。4.服务器机器MetaBase.xml:(1)。AspMaxRequestEntityAllowed="1073741824" 5. 在 IIS ver6,网站 -> 服务选项卡 -> 隔离模式,“以 IIS 5.0 隔离模式运行 WWW 服务”被选中。
我们目前对 Internet 服务器机器上的问题的理解是,即使线程继续完成复制文件,.Net 在默认超时值下回收工作进程也会导致“线程被中止”异常。
如果我们的理解是正确的,那么为什么同样的超时配置可以在内网的服务器机器上起作用呢?我们如何使超时配置在 Internet 上的生产服务器机器上工作?