在ISAPI筛选器上调用LoadLibraryEx失败

时间:2013-02-03 17:44:29

标签: c# php asp.net iis-7.5 isapi

我正在开发一个PHP / C#Soap服务项目,我在IIS中运行它时遇到了问题,尽管它之前已经运行过了。

当我尝试转到ASMX文件或WSDL文件时,我收到IIS错误:

  

HTTP错误500.0 - 内部服务器错误调用LoadLibraryEx   ISAPI过滤器“C:\ php \ php5isapi.dll”失败

php5isapi.dll位于错误中指定的位置,并将其添加到IIS中的isapi过滤器中。我知道PHP工作正常,因为标准.php文件可以工作,但我不明白为什么ASMX / WSDL文件会访问php5isapi dll,因为它不是PHP。 soap服务位于C#ASMX Web服务中。

这只会发生在应用程序池中启用32位应用程序的原因。这需要是真的,因为它不会抛出一个ASP异常,说明DLL格式不正确。

我知道实际服务工作正常,因为它在Mono下的linux上运行正常,所以IIS有问题,但我看不清楚。

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:3)

这看起来是同一个问题吗? https://bugs.php.net/bug.php?id=39163

gmail dot com的“FreakTrap”提出了以下解决方案:

  

sneakers05修改了应用程序池的32位设置   还纠正了我使用php5isapi.dll的问题。

     

对于我们这些人来说,在ISAPI过滤器上调用'LoadLibraryEx'   尝试手动后“C:\ PHP \ php5isapi.dll”失败'错误   安装:

1)首先使用ISAPI过滤器和新的IIS安装 扩展已启用。

2)在主要设置下[在最顶端 您的IIS管理器的层次结构视图,在“应用程序池”之上],添加 按照以下顺序:

  • 用于php5isapi.dll的ISAPI过滤器
  • php5isapi.dll的ISAPI和CGI限制条目
  • php5isapi.dll的处理程序映射

3)转到应用程序池部分。

4)右键单击“默认应用程序池”,然后选择“高级设置”。

5)将第二个选项[Enable 32-Bit ...]设置为True。

  

此外,重要的是您的“默认网站”不具有顶级配置中的任何唯一设置。这是造成的   我的ISS表现出一些非常奇怪的行为,这就是我的原因   建议您先删除默认网站并创建新网站   之一。

我觉得很糟糕只是建议一个链接,但看到没有太多的活动,所以认为它可能有所帮助。

答案 1 :(得分:1)

此错误的常见原因是:

  1. 缺少DLL
  2. 比特版本不匹配
  3. 如果DLL存在于正确的位置,则DLL的位版本很可能与应用程序池的位版本不匹配(例如,您正尝试在其中加载32位版本的过滤器) 64位应用程序池)。

    解决方案,如果你选择对抗这种行为,就是在32位应用程序池中使用32位应用程序和过滤器;同样适用于64位。配置您的网站并根据需要移动您的ASPX和PHP代码。请记住,php5isapi.dll几年前已经退役。

    重新推荐的解决方案是安装最新的32位非线程安全PHP以及FastCGI模块。无论“启用32位应用程序”设置如何,您的PHP应用程序都将正常工作。您可以使用:

    1. PHP MSI installer安装PHP
    2. PHP Manager for IIS来管理安装(它还可以帮助您从ZIP存档安装PHP)

答案 2 :(得分:0)

我曾经遇到类似这样的问题,IIS无法找到php5isapi.dll。

事实证明,问题是我使用“浏览”按钮指定了dll的路径。这导致了一个缩写路径(其中有一个〜)。

我实际上是手动输入路径(而不是使用浏览按钮),突然IIS可以找到dll。 (并且路径没有缩写)。