前言:我们有负载均衡的Web服务器和一个安静的wcf api Web应用程序。 在我们的网络应用程序中,我们通过nuget包或其他视觉工作室项目添加了几个参考。上周我添加了一个新项目(PLEGateway),它是我们系统中的一个数据层,以及一些进入第三方系统的API调用。 代码(bin)发布到文件服务器,并具有适当的权限,因此Web服务器可以看到它。
部署后,我遇到了可怕的情况 无法加载文件或程序集' PLEGatewayCore,Version = 1.0.0.6,Culture = neutral,PublicKeyToken = null'或其中一个依赖项。访问被拒绝。错误。
奇怪的是,它似乎只是间歇性地抛出这个错误。意味着它会起作用,过一段时间后再回来再试一次,它会失败。等一会儿,回来,它会突然工作。 "一会儿"定义从5分钟到任何地方,一夜之间,所以只是试图通过邮递员随机执行。
我在这个问题上经历了谷歌和其他SO问题,他们似乎都指向Temporary asp.net文件夹上的权限问题。我验证权限设置正确。为32位应用程序启用了应用程序池 IS 。 Web应用程序中的所有其他方法都有效,只有引用此dll中任何函数的方法才会导致错误。
我终于开始查看Process explorer以获取此应用程序池的W3wp.exe文件,当我查看.NET程序集选项卡时,一个服务器加载了我的dll,而另一个服务器在查看非共享时没有AppDomain部分。
总体而言,我的问题是:为什么一台服务器加载dll,而另一台服务器没有,当IIS配置也从同一位置(共享配置)拉出时?
答案 0 :(得分:0)
您有2个Web服务器A和B.两者都配置为从共享文件服务器加载bin文件夹中的二进制文件。
您收到访问被拒绝错误,因为IIS在加载时会锁定这些文件。这意味着只有一个Web服务器成功加载其二进制文件。
间歇性地发生错误的原因取决于您的webrequest服务的服务器由负载均衡器及其正在使用的负载均衡算法决定。
将二进制文件放在每个单独的Web服务器上,以防止这些文件出现单点故障。