4

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

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

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

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

这只是我在应用程序池中启用 32 位应用程序的原因。这必须是真实的,因为当它不是时它会引发一个 ASP 异常,说明 DLL 的格式不正确。

我知道实际的服务运行良好,因为它在 Mono 下的 linux 上运行良好,所以 IIS 有问题,但我看不出是什么。

感谢您的任何帮助,您可以提供。

4

3 回答 3

3

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

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

sneakers05 对应用程序池的 32 位设置的修改也纠正了我在使用 php5isapi.dll 时遇到的问题。

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

1) 从启用 ISAPI 过滤器和扩展的全新 IIS 安装开始。

2) 在主要设置下 [在 IIS 管理器层次结构视图的最顶部,在应用程序池上方],按此顺序添加以下内容:

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

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

4) 右键单击​​默认应用程序池并选择高级设置。

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

此外,重要的是您的“默认网站”没有来自顶级配置的任何独特设置。这导致我的 ISS 表现出一些非常奇怪的行为,这就是为什么我建议您首先删除默认网站并创建一个新网站。

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

于 2013-02-09T09:22:42.347 回答
1

此错误的常见原因是:

  1. 缺少 DLL
  2. 位版本不匹配

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

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

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

  1. PHP MSI 安装程序来安装 PHP
  2. 用于 IIS 的 PHP 管理器来管理安装(它还可以帮助您从 ZIP 档案中安装 PHP)
于 2013-02-09T10:28:16.890 回答
0

我曾经遇到过类似的问题,即 IIS 找不到 php5isapi.dll。

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

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

于 2013-02-09T11:06:40.750 回答