【问题标题】:httpModule in Web Application Project not being called when deployed to IIS部署到 IIS 时未调用 Web 应用程序项目中的 httpModule
【发布时间】:2021-03-16 16:01:46
【问题描述】:

我正在将网站项目转换为 Web 应用程序项目。我有一切可以编译甚至发布(漫长的过程)。但是,既然我已经在 IIS 中“加载”了项目,则不会调用 httpModule。

web.config 的模块部分如下所示:

<modules runAllManagedModulesForAllRequests="true">
        <add name="ContentWebSite" type="ContentWebSite.ContentWebSite"/>
     </modules>

httpModule 的类是这样开始的:

namespace ContentWebSite
{
   public class ContentWebSite : IHttpModule
   {
      private HttpApplication _Application;

我错过了什么?当我在本地 IIS 的上下文中运行时,永远不会在构造函数或 ContentWebSite 类的 init 方法中设置断点。当我在 IIS Express 中运行时,断点被击中!如何让 IIS 调用 httpModule?

TIA,

【问题讨论】:

  • 我认为模块正在加载(如果我将 web.config 中的类型更改为 ContentWebSite.Content.WebSit,我会收到一条错误消息,指出无法加载模块)。但是,构造函数或 Init 方法没有被调用。

标签: iis web-config iis-express httpmodule web-application-project


【解决方案1】:

您可以检查应用程序池模式是否导致您的问题。

应用程序池模式:经典与集成。

<system.webServer><!--for integrated mode-->
    <modules>
      <add name="modulename" type="ContentWebSite.ContentWebSite" />
    </modules>
  </system.webServer>

  <system.web><!--for classic mode-->
     <httpModules>
      <add name="modulename" type="ContentWebSite.ContentWebSite" />
    </httpModules>
  </system.web>

【讨论】:

  • 感谢您的回复。我刚刚发现了另一个线索:如果我在 IIS Express 中运行应用程序,就会执行 httpModule!切换到 IIS(这是网站在生产环境中运行的地方),httpModule 不会执行。我检查了应用程序池,它设置为集成。
  • Theobald Du - 感谢您的回复。 IIS 上已经安装了可扩展性功能。我们有在 IIS 中运行的 asp.net 网站项目,这些项目具有运行良好的 httpModules。这个 Web 应用程序项目只是跳过了 httpModule。
【解决方案2】:

好的,所以我通过更改模块添加名称行来完成此工作:

<add name="modulename" type="ContentWEbSite.ContentWebsite, appName" />

其中 appName 是为项目生成的 DLL 的物理名称!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多