IIS 7.5 .NET共享DLL访问被拒绝错误

时间:2018-05-30 22:13:48

标签: .net dll iis-7.5 access-denied

前言:我们有负载均衡的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配置也从同一位置(共享配置)拉出时?

1 个答案:

答案 0 :(得分:0)

您有2个Web服务器A和B.两者都配置为从共享文件服务器加载bin文件夹中的二进制文件。

您收到访问被拒绝错误,因为IIS在加载时会锁定这些文件。这意味着只有一个Web服务器成功加载其二进制文件。

间歇性地发生错误的原因取决于您的webrequest服务的服务器由负载均衡器及其正在使用的负载均衡算法决定。

将二进制文件放在每个单独的Web服务器上,以防止这些文件出现单点故障。