21

我正在使用 HttpModule 在我的网站上进行一些 URL 缩短。我正在使用 Visual Studio 2008 和 IIS 7 以及 .Net 3.5。

当模块在 web.config 的system.webServer元素中指定,并且站点在 IIS 中运行时,它工作正常。配置如下所示:

<system.webServer>
        <modules>
            <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" />
        </modules>...

我的模块附加到 BeginRequest 事件,一切正常。但是,我无法使用内置的 VS Web 服务器(Cassini)运行它。我尝试将模块配置移动到web.config中的system.web元素,但没有成功。我在上面设置了断点,没有任何反应。

关于为什么这会是一个问题的任何想法?

(我还尝试了 global.asax 中的 Application_BeginRequest 事件。仍然没有运气,尽管我更愿意将所有内容都保留在 web.config 中。)

4

3 回答 3

41

Cassini,IIS 提供的开发 Web 服务器使用 IIS6 模块语法,所以你必须像这样复制模块添加

<system.web>
  <httpModules>
    <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" />
  </httpModules>
</system.web>


<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
    <remove name="MinimizeModule" />
    <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" 
         preCondition="managedHandler" />
  </modules>
</system.webServer>

请注意,我还为您的 IIS7 设置添加了先决条件

于 2009-06-08T09:01:44.663 回答
2

如果您在 IIS 7 上运行,请将模块放入:

<configuration>
   <system.webServer>
      <modules>
         <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" />
      </modules>
   </system.webServer>
</configuration>

如果您在 Cassini(Visual Studio 的集成微型 Web 服务器)上运行,请将模块放入:

<configuration>
   <system.web>
      <httpModules>
          <add name="MinimizeModule" type="ClipperHouse.UrlMinimizer.MinimizeModule" />
   </system.web>
</configuration>

如果你给它 Cassini 位置,IIS 将会崩溃。
如果你给它 IIS 位置,Cassini 会崩溃。

每当我部署时,我必须确保不部署web.config. 我还包括以下注释web.config

<system.web>
   <!--The Cassini location to add modules (comment out for IIS)-->
   <httpModules>
      <!--WARNING: IIS will crash if you leave this in here.
          IISBUG: IIS doesn't support system.web/httpModules, 
          and Cassini doesn't support system.webServer/modules
      -->
      <!--Comment out for IIS-->
      <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
   </httpModules>
</system.web>

<system.webServer>
   <!--The IIS7 location to add modules (comment out for Cassini)
   <modules runAllManagedModulesForAllRequests="true">
      <!--IIS7 will crash if you present a system.web httpModules. -->
      <remove name="PerformanceHttpModule" />
      <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
   </modules>
</system.webServer>

IIS 的左手不知道 Cassini 的右手在做什么——他们都搞砸了。

于 2015-01-09T16:20:37.697 回答
0

您是否尝试将模块声明也放入元素中?当使用 Cassini 在 dev 中运行时,这通常是我必须放置模块以使其运行的地方。

于 2009-06-08T08:41:28.837 回答