![IIS 和 DFS 上的 asmx WebService 中偶尔会出现“无法加载文件或程序集”](https://linux22.com/image/484705/IIS%20%E5%92%8C%20DFS%20%E4%B8%8A%E7%9A%84%20asmx%20WebService%20%E4%B8%AD%E5%81%B6%E5%B0%94%E4%BC%9A%E5%87%BA%E7%8E%B0%E2%80%9C%E6%97%A0%E6%B3%95%E5%8A%A0%E8%BD%BD%E6%96%87%E4%BB%B6%E6%88%96%E7%A8%8B%E5%BA%8F%E9%9B%86%E2%80%9D.png)
我们在两个相同的 Windows Server 2003 机器上托管了一些 ASMX Web 服务。Web 服务的虚拟目录加载在 DFS 共享中,两个服务器都指向同一个共享。我们在互联网和两个 Web 服务器之间有一个负载平衡器。
在一个看似随机的时间间隔内(目前大约每周两次),当用户尝试访问 Web 服务上的方法时,IIS 会针对该方法调用中使用的某个程序集返回错误:“无法加载文件或程序集”,并且每次调用该方法时都会继续报告该错误,直到应用程序池被回收。
我们还没有发现该问题的任何明显模式。以下是我所知道的:
- 缺少的组件各不相同(但始终是自制组件)
- 失败的 Web 服务方法各不相同
- 问题出现的时间或间隔没有明显的规律
- 问题出现时没有管理员用户访问服务器
- 失败的方法在一台服务器上可以正常工作,而在另一台服务器上会失败,尽管两台服务器都指向同一个 bin 文件夹
- 可以通过回收应用程序池并且不做其他更改来解决问题
我已经启用了 Assembly Binder Log,并且知道 Binder 正在正确的位置查找文件。
我们的程序集是针对.Net 3.5 编译的。
答案1
我们也遇到了类似的问题。
我们从未正式弄清楚到底发生了什么,但我们将问题缩小到 web.config 中的模拟级别以及用户对托管程序集文件的文件夹的访问。
我们发现,有时 IIS 工作进程会尝试以访问 Web 请求的用户身份加载程序集。我们可以看到,尝试加载程序集的线程当前正在模拟向某个 asp.net 页面发出请求的用户。
无论如何,我们通过授予域中经过身份验证的用户访问权限解决了该问题。希望您能找到更好的解决方案。