IIS 7.5 忽略本地 HTTP 处理程序

IIS 7.5 忽略本地 HTTP 处理程序

我正在尝试为 Web 服务提供一个简单的代理应用程序。为此,我有一个 HTTP 处理程序,它将对我网站的任何请求传递到 web.config 中配置的另一个网站。该代理已在本地测试过,运行良好。我已经在 VS 2012 上使用 IIS Express 对其进行了测试,并在运行 Windows Server 2008 R2 和 IIS 7.5 的本地服务器上对其进行了测试。

现在,我花了好几天的时间尝试在我们的部署服务器上安装此应用程序,但毫无成效。每次我尝试访问该应用程序时,它都会忽略我在 web.config 上注册了处理程序的事实,而 StaticFile 处理程序会捕获请求。它似乎忽略了我的处理程序注册。

我已经尝试清除应用程序上的所有处理程序并仅保留我创建的 HttpProxy,但它仍然调用 StaticFile。

有趣的是,我偶然在 IIS 的根节点上成功配置了代理处理程序。从那时起,处理程序就可以在我的应用程序上运行,但它也破坏了服务器上的所有其他应用程序,因为它捕获了所有请求,而这些应用程序没有安装处理程序 DLL。因此,当它被继承时它可以工作,但当我在本地配置它时却不行。

这是我的 web.config 的 webServer 部分:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <add name="ProxyHttpHandler"
           path="*"
           verb="*"
           type="DDProxy.ProxyHttpHandler, DDProxy"
           resourceType="Unspecified"
      />
    </handlers>
</system.webServer>

基本上我很困惑,因为 IIS 似乎忽略了我专门传递给这个应用程序的配置。有什么想法吗?

编辑:这里有一个小的开发。似乎当我编辑 applicationhost.config 时,配置会传递给应用程序(即使我使用“位置”指向我的应用程序)。但是,当我在 web.config 上传递配置时,我没有得到这样的运气。尝试使用 DirectoryListing。

答案1

如果根网站具有带有定义的 http 处理程序或其他 system.webserver 节点的 web.config,则您下面的应用程序可能会从根应用程序继承其配置。

您可以尝试阻止 http 处理程序位置的根配置继承:

<location path="." inheritInChildApplications="false">
  <system.webServer>
   ...
  </system.webServer>
</location>

或者在子配置中使用如下方法:

<system.webServer>
  <clear/>
  <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
     <add name="ProxyHttpHandler"
       path="*"
       verb="*"
       type="DDProxy.ProxyHttpHandler, DDProxy"
       resourceType="Unspecified"
     />
    </handlers>
</system.webServer>

现在,如果在根配置中的 system.web 节点中定义了任何其他 Httphandler,您仍然可能会遇到问题,因此您可能需要在子配置中清除它:

<system.web>
   <httpHandlers>
     <clear />
   </httpHandlers>
</system.web>

相关内容