获取.net来处理IIS7中的所有请求

时间:2012-03-29 12:29:56

标签: iis iis-7

我有一个在IIS 6上运行的应用程序。所有请求都通过aspnet_isapi.dll。这是通过通配符应用程序映射(未验证文件存在)实现的。

我已将所述应用程序复制到运行IIS7的计算机上,并希望再次使用它。

在应用程序中,任何扩展名为.aspx(或.ashx)的请求都会以正常方式处理。具有不同扩展名的其他请求(例如.html和.xml)由自定义http模块处理。有些请求没有扩展名,并且动态地重定向到带扩展名的文件(例如,访问... / item / 1可能会重定向到... / item / 1.html或... / item / 1.xml,具体取决于accept头中的值)。

新位置可能不存在,但动态生成响应。

目前,应用程序池处于“经典”模式,并且正在使用.NET v4.0(之前使用的是.NET 3.5,但这似乎与问题无关)。自定义http模块仅在web.config中设置。

重定向(从... / item / 1到... / item / 1.html)似乎有效,这表明应用程序确实正在处理扩展较少的请求(该重定向是在应用程序本身中写入的)。我认为这意味着自定义模块正在运行。

但是扩展请求(.html,.xml等)失败了。我得到的错误是:

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

Module: IIS Web Core
Notification: MapRequestHandler
Handler: StaticFile
Error Code: 0x80070002

我试过了: 添加映射*到aspnet_isapi.dll的通配符脚本映射 尝试将* .html的特定映射添加到aspnet_isapi.dll

这些仍会导致相同的错误消息,并且似乎仍然会转到处理程序“StaticFile”。

我尝试修改“StaticFile”以便它使用aspnet_isapi.dll可执行文件,这会导致新的错误:

HTTP Error 404.4 - Not Found
The resource you are looking for does not have a handler associated with it.
Handler: Not yet determined

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:10)

以集成模式设置应用程序池,并设置所有请求都运行所有托管模块

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
  ...
  </modules>
  ...
</system.webServer>

答案 1 :(得分:0)

在服务配置中使用此配置,它对我有用。

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="WcfService.Service1">
        <endpoint address=""
                  binding="basicHttpBinding"
                  bindingConfiguration="secureHttpBinding"
                  contract="WcfService.IService1"/>

        <endpoint address="mex"
                  binding="mexHttpsBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="secureHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpsGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>