ASP.NET:这个 HttpModule 做了什么?System.ServiceModel.Activation.HttpModule。

9

有人能告诉我这个HttpModule的目的吗?它出现在我的HttpModuleCollection列表中,但我不知道它是用来做什么的。

System.ServiceModel.Activation.HttpModule

我找不到任何关于它的文档。

3个回答

12

System.ServiceModel.Activation.HttpModule是由于安装了“Microsoft .NET Framework 3.5.1” / “Windows Communication Foundation HTTP Activation”功能而引入的。如果您不需要此功能,可以卸载该功能或从web.config文件中删除该模块。加载的未使用模块越少,您的Web应用程序运行速度就越快。

如果您在服务器上安装.NET 4框架之后安装此功能,则可能会遇到http://blogs.iis.net/webtopics/archive/2010/04/28/system-typeloadexception-for-system-servicemodel-activation-httpmodule-in-asp-net-4.aspx中描述的问题。

通常,HTTP模块会在每个请求中响应BeginRequest()和EndRequest()事件。因此,在处理请求之前和之后,模块都会运行。在http://msdn.microsoft.com/en-us/library/bb398986(v=VS.100).aspx的“HTTP模块工作原理”一节中,您可以了解有关HTTP模块的更多信息。

http://msdn.microsoft.com/zh-cn/library/ms227673.aspx介绍了如何创建自定义的HTTP模块。一些小的自定义模块可以非常有帮助,比如,在如何删除RESTful WCF服务中的“.svc”扩展名?中,你可以学到一个代码示例(源自书籍“RESTful .NET”的第5章第96页),它可以“从WCF REST URL中删除.SVC扩展名”。在http://www.west-wind.com/weblog/posts/570695.aspx中,你可以了解如何使用“IIS 7 Rewrite模块”实现相同的功能。

关于HTTP模块的一般信息并不是你的问题的一部分,但我插入它是为了更好地理解Activation.HttpModule的作用,以及其他更有用的模块,你可以使用或编写自己的模块。


4
这个模块是使WCF(Windows Communication Foundation)服务工作的关键,从 .net Framework 3.0 开始。如果您不需要使用 WCF,可以忽略它且不会有任何问题。如果您真的想删除它,可以从根 web.config 文件中删除它(例如在 \Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config 中)。但我建议保留它,以防将来需要使用 WCF。

-3
一个HTTP模块是一个.NET程序集,每当您的Web应用程序收到请求时都会被调用。这是ASP.NET提供的标准模块,将您的.NET Web应用程序代码连接到IIS Web基础结构。
请参见此处的解释
HTTP模块
HTTP模块是一个被调用的程序集,它会在每个请求到达应用程序时都被调用。HTTP模块是作为请求流程的一部分而被调用,并且可以访问请求期间的生命周期事件。因此,HTTP模块允许您检查传入的请求并根据请求采取行动。它们还允许您检查传出响应并对其进行修改。
在 IIS 6.0 中,ASP.NET 请求流程与 Web 服务器请求流程是分开的。在IIS 7.0中,ASP.NET请求管道和Web服务器请求管道可以集成到一个公共请求管道中。在IIS 7.0中,这被称为集成模式。统一的管道对于ASP.NET开发人员有几个好处。例如,它允许托管代码模块接收所有请求的管道通知,即使请求不是针对ASP.NET资源的请求。但是,如果您想要,您可以在经典模式下运行IIS 7.0,这将模拟ASP.NET在IIS 6.0中运行。有关更多信息,请参阅IIS 7.0的ASP.NET应用程序生命周期概述。
ASP.NET HTTP模块类似于ISAPI过滤器,因为它们被调用以处理所有请求。但是,它们是用托管代码编写的,并且完全与ASP.NET应用程序的生命周期集成。您可以将自定义模块源代码放在应用程序的App_Code文件夹中,或者将已编译的自定义模块作为程序集放置在应用程序的Bin文件夹中。
ASP.NET使用模块来实现各种应用程序功能,包括表单身份验证、缓存、会话状态和客户端脚本服务。在每种情况下,当这些服务启用时,模块都会作为请求的一部分被调用,并执行超出任何单个页面请求范围的任务。模块可以消耗应用程序事件,并引发可以在Global.asax文件中处理的事件。有关应用程序事件的更多信息,请参阅IIS 5.0和6.0的ASP.NET应用程序生命周期概述以及IIS 7.0的ASP.NET应用程序生命周期概述。

我知道什么是Http模块,只是不知道这个。你能详细解释一下你所说的“将你的.NET Web应用程序代码连接到IIS Web基础结构”的意思吗?如果它确实是这样实现的,那么作为一个Http模块似乎很奇怪 - 如果它真的是这样,那么它几乎不是可选的。 - UpTheCreek
你引用的文本是关于httpmodules的一般性问题,而我的问题是关于特定模块的。 - UpTheCreek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接