【问题标题】:Calling LoadLibraryEx on ISAPI filter failed在 ISAPI 过滤器上调用 LoadLibraryEx 失败
【发布时间】:2013-01-18 11:27:23
【问题描述】:

我正在开发一个 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 有问题,但我看不出是什么。

感谢您提供的任何帮助。

【问题讨论】:

  • 您运行的是什么版本的 IIS 以及什么操作系统,请包括您运行的发行版和/或服务包版本。此外,您正在运行哪个版本的 .NET Framework。
  • @LCarter 我正在使用带有 Windows 7 SP 1 x64 的 IIS 7.5。肥皂服务在 .Net 4 上运行
  • 您是否在同一个应用程序池下同时运行 .NET 和 PHP 站点?
  • @LCarter 我不认为 php 被放入应用程序池中。但是,如果是我没有更改任何内容,那么 PHP 可能会在默认应用程序池中。肥皂服务位于单独的应用程序池中
  • php5isapi.dll?这是 2013 年。您使用的是哪个版本的 PHP?

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


【解决方案1】:

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

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

sneakers05对Application Pool的32位设置的修改 还纠正了我在使用 php5isapi.dll 时遇到的问题。

对于我们这些获得“在 ISAPI 过滤器上调用 LoadLibraryEx”的人 "C:\PHP\php5isapi.dll" failed' 尝试手动后的错误 安装:

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

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

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

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

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

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

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

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

【讨论】:

  • 非常感谢您的帮助,这让我疯狂了好几天。再次感谢
【解决方案2】:

这个错误的常见原因有:

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

如果 DLL 位于正确的位置,则 DLL 的位版本很可能与应用程序池的位版本不匹配(例如,您试图在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)

【讨论】:

  • +1 表示应用程序池的架构。虽然在 2013 年,大家应该从自己的 32 位理解自己的 64 位。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2021-04-10
    • 2010-12-01
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多