IIS 7.5和Tomcat安装程序:错误500.19

我设置了一个64位IIS 7.5 / Tomcat 7.0.26服务器,当我导航到http://localhost时收到以下错误 –

错误摘要

 HTTP Error 500.19 - Internal Server Error The requested page cannot be accessed because the related configuration data for the page is invalid. 

详细的错误信息

 Module IIS Web Core Notification BeginRequest Handler Not yet determined Error Code 0x80070021 Config Error This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault="Deny"), or set explicitly by a location tag with overrideMode="Deny" or the legacy allowOverride="false". Config File \\?\C:\Folder\apache-tomcat-7.0.29\jk\web.config Requested URL http://localhost:80/jakarta/isapi_redirect.dll Physical Path C:\Folder\apache-tomcat-7.0.29\jk\isapi_redirect.dll Logon Method Not yet determined Logon User Not yet determined 

configuration源 (第4行以红色突出显示)

 3: <system.webServer> 4: <handlers accessPolicy="Read, Execute, Script" /> 5: </system.webServer> 

我猜测问题是web.config文件(在configuration源错误中提到)写入不正确。 有人可以证实这一点吗? 我一直无法find一个示例web.config文件来closures。

我从其他正在工作的服务器复制了整个jk文件夹(其中包括isapi_redirect.dll,isapi_redirect.properties,uriworkermap.properties,web.config和workers.properties),但该服务器的configuration与原来的configuration不同设置为以不同的方式运行Tomcat。

解决这个问题的线索是在错误信息中(IIS非常善于解释500.19的错误,这很好):

此configuration部分不能用于此path。 当部分locking在父级别时,会发生这种情况。 locking可以是默认的(overrideModeDefault =“Deny”),也可以通过overrideMode =“Deny”或legacy allowOverride =“false”的位置标签进行显式设置。

这是说你不能在你的web.config文件中指定configuration节更改(在这种情况下, <handlers accessPolicy="Read, Execute, Script">

您可以使用以下命令通过在站点级别解锁此部分来解决此问题:

 appcmd unlock config "[SITENAME]" -section:handlers /commit:apphost 

其中[SITENAME]是TomCat位安装位置的名称。

您也可以在IIS7的pipe理控制台中执行此操作:

  1. 导航到该站点并启动configuration编辑器小程序/function:

    在这里输入图像说明

  2. 在Configuration Editor中,从Section列表框中selectsystem.webServer/handlers ,从From:列表框中selectApplicationHost.config <location path="[SITENAME]" />然后单击Unlock Section

    在这里输入图像说明

命令行版本中的/commit:apphost开关以及GUI版本中的ApplicationHost.config <location path=...位置可确保此部分在IIS的applicationHost.config文件中而不是在web.config解锁。 这意味着当有人编辑web.config时,不太可能通过键盘input来撤销。

在引擎盖下面,这个增加了一个<location>元素,看起来像:

 <location path="[SITENAME]" overrideMode="Allow"> <system.webServer> <handlers /> </system.webServer> </location> 

然而,在这样做之前,我会尝试先删除web.config文件中的违规行,但我怀疑isapi_redirect.dll需要是可执行文件。