我正在开发一个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有问题,但我看不清楚。
感谢您提供的任何帮助。
答案 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管理器的层次结构视图,在“应用程序池”之上],添加 按照以下顺序:
3)转到应用程序池部分。
4)右键单击“默认应用程序池”,然后选择“高级设置”。
5)将第二个选项[Enable 32-Bit ...]设置为True。
此外,重要的是您的“默认网站”不具有顶级配置中的任何唯一设置。这是造成的 我的ISS表现出一些非常奇怪的行为,这就是我的原因 建议您先删除默认网站并创建新网站 之一。
我觉得很糟糕只是建议一个链接,但看到没有太多的活动,所以认为它可能有所帮助。
答案 1 :(得分:1)
此错误的常见原因是:
如果DLL存在于正确的位置,则DLL的位版本很可能与应用程序池的位版本不匹配(例如,您正尝试在其中加载32位版本的过滤器) 64位应用程序池)。
解决方案,如果你选择对抗这种行为,就是在32位应用程序池中使用32位应用程序和过滤器;同样适用于64位。配置您的网站并根据需要移动您的ASPX和PHP代码。请记住,php5isapi.dll几年前已经退役。
重新推荐的解决方案是安装最新的32位非线程安全PHP以及FastCGI模块。无论“启用32位应用程序”设置如何,您的PHP应用程序都将正常工作。您可以使用:
答案 2 :(得分:0)
我曾经遇到类似这样的问题,IIS无法找到php5isapi.dll。
事实证明,问题是我使用“浏览”按钮指定了dll的路径。这导致了一个缩写路径(其中有一个〜)。
我实际上是手动输入路径(而不是使用浏览按钮),突然IIS可以找到dll。 (并且路径没有缩写)。