IIS7 从 32 位迁移到 64 位问题

IIS7 从 32 位迁移到 64 位问题

我们目前正在将多个站点从 x86 win 2008 迁移到 x64 win 2008。我们已经将配置目录和 wwwroot 从旧服务器复制到新服务器,但是当我们启动服务器时,我们收到 503 错误页面,并且事件日志中有 5 个警告,然后出现一个错误。

警告:

A listener channel for protocol 'http' in worker process '2060' serving application pool 'SiteAppPool' reported a listener channel failure.  The data field contains the error number.

事件的 xml:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="Microsoft-Windows-WAS" Guid="{524B5D04-133C-4A62-8362-64E8EDB9CE40}" EventSourceName="WAS" /> <EventID Qualifiers="32768">5139</EventID> <Version>0</Version> <Level>3</Level> <Task>0</Task> <Opcode>0</Opcode> <Keywords>0x80000000000000</Keywords> <TimeCreated SystemTime="2011-04-14T11:10:04.000Z" /> <EventRecordID>334493</EventRecordID> <Correlation /> <Execution ProcessID="0" ThreadID="0" /> <Channel>System</Channel> <Computer>WEBSRV64</Computer> <Security /> </System> <EventData> <Data Name="AppPoolID">SiteAppPool</Data> <Data Name="ProcessID">2060</Data> <Data Name="param3">0</Data> <Data Name="ProtocolID">http</Data> <Binary>7E000780</Binary> </EventData> </Event>

我们得到了 5 个这样的进程,但它们的进程号都不同。

之后我们收到此错误:

Application pool 'SiteAppPool' is being automatically disabled due to a series of failures in the process(es) serving that application pool.

我们完全不知道为什么会发生此错误,我们对网站进行了 1 对 1 复制。目前我们仍在 32 位服务器上运行,但我们希望尽快迁移。有人知道我们为什么会遇到此错误吗?

答案1

可能有很多事情,但我想到了以下几件事:

  • 旧站点是否使用了不同的应用程序池 ID(可能是本地计算机用户)?如果是这样,则可能是应用程序本身内部的某些因素没有正确处理新 ID。
  • 新机器上是否安装了正确版本的.Net Framework?
  • 您是否使用高级设置视图逐点比较了新旧应用程序池?

如果您创建一个新的站点/应用程序池并接受默认设置,它是否仍对新站点执行此操作?

答案2

这可能是您网站中与 x64 不兼容的组件。它可能是 isapi 筛选器,也可能是某些托管代码或 COM+ 调用。

如果 http 请求立即失败,则可能是 isapi 过滤器。您可以通过禁用所有过滤器并测试 test.html 页面来确认。然后重新添加内容,直到再次失败。

您有两个解决方案:

  • 最简单的方法:以 32 位模式运行应用程序池。无论如何,这是一个很好的设置。您可以从应用程序池高级属性(最常用的选项之一)中进行设置。将其设置为应用程序池默认值,将来的应用程序池也将以此方式设置。在 IIS7 中,您可以利用 x64 的高内存,同时仍以 32 位模式运行应用程序池。
  • 或者,一旦您缩小了所讨论的组件的范围,就可以从供应商处获取更新。

相关内容