Iis 7 在IIS7 doens和x27中注册的模块;行不通
我创建了一个小型类库,其中包含一个HttpModule,它使用一个过滤器向IIS7提供的每个请求页面添加一些html 我首先通过在测试网站的web.config中注册模块来测试它,它可以正常工作,但只在一个应用程序中工作 我生成了一个dll,并创建了一个强命名程序集 我需要以某种方式将此程序集作为服务器级IIS中的模块添加,以便它可以用于所有请求、所有应用程序以及非asp.net内容 到目前为止,我已经尝试将.dll添加为本机模块。这不管用。它在本机模块列表中,但不起作用 我已经在GAC中安装了.dll 继续阅读,似乎我必须将程序集添加为托管模块,然后在IIS中“添加托管模块”下的下拉列表中选择它 为此,我尝试使用命令行工具appcmd编写:“addmodule/name:string/type:string/predition:string” 我没有成功地做到这一点,因为我不知道设置什么作为类型和前提条件 正如我所读到的,在IIS中注册的模块应该适用于所有站点中的所有应用程序和所有请求 关键是避免在每个applications web.config文件中注册模块Iis 7 在IIS7 doens和x27中注册的模块;行不通,iis-7,httpmodule,Iis 7,Httpmodule,我创建了一个小型类库,其中包含一个HttpModule,它使用一个过滤器向IIS7提供的每个请求页面添加一些html 我首先通过在测试网站的web.config中注册模块来测试它,它可以正常工作,但只在一个应用程序中工作 我生成了一个dll,并创建了一个强命名程序集 我需要以某种方式将此程序集作为服务器级IIS中的模块添加,以便它可以用于所有请求、所有应用程序以及非asp.net内容 到目前为止,我已经尝试将.dll添加为本机模块。这不管用。它在本机模块列表中,但不起作用 我已经在GAC中安装了
有什么想法吗?您必须在服务器级别添加一个模块。您可以从命令行执行此操作:
appcmd add module /name:string /type:string /preCondition:string
要获取命令行帮助,请执行:appcmd add module/?
简而言之,它必须看起来像:
appcmd add module /name:AnyNameOfYourChoice /type:YourClassNameSpace.YourClassName
/pretition
参数是可选的
更多细节
或
通过进入服务器节点->模块->添加托管模块,从IIS管理器执行此操作更多细节。(页面底部)我现在可以根据每个请求运行模块。它以前不起作用的原因是我完全不相关的错误。 因此,使其工作所涉及的步骤是:
这一定是可能的,对吧?在使用这个工具一段时间后,我设法让它工作起来 在.net 4.0 GAC中安装程序集不会使其在IIS管理器的“添加托管模块”下的“类型”下拉列表中可用 我要做的是: 创建.net 4.0类库,并将其编译为强名称程序集 使用位于程序文件(x86)\Microsoft SDK\Windows\v7.0A\bin\NETFX 4.0工具中的gacutil将其安装到.net 4.0 GAC中 (或使Visual Studio自动编译、签名和安装程序集) 在applicationHost.config的
下添加此行:(必须手动完成,不能在管理器中完成)
这使得该模块可以根据对.NET4中开发的站点的请求运行
然而,对在.NET4之前版本中开发的站点的请求似乎不能使用在.NET4.0中创建的模块。因此,如果您在.NET3.5中创建的站点中请求页面,该模块将无法工作
另一个观察结果:
通过applicationHost.config文件将模块添加到IIS后,如果打开IIS管理器,请在连接中突出显示服务器名,然后单击模块。您将在列表中看到.NET4模块
双击它,然后您将看到它的设置。您将看到选中了“仅对ASP.NET应用程序或托管处理程序的请求调用”复选框。如果您取消选中它,并点击ok,您将得到一个错误,说明GAC中尚未安装程序集
但我不是刚刚在.NET4GAC中成功地安装了它吗?我不是看到模块在请求中运行吗
如果继续并保存设置,则会出现运行时错误,如果查看applicationHost.config,您将看到以前手动添加的模块设置已更改
但是如果我想呢“仅对ASP.NET应用程序或托管处理程序的请求调用?我已编辑了答案,并提供了有关如何使用appcmd命令的更多帮助。不要将其添加为本机模块,如果您在命令行中遇到困难,请使用IIS管理器添加托管模块,请在我的回答中说明步骤。谢谢。正如你所注意到的,我多次编辑我的问题,因为我希望尽可能具体。我将尝试您的建议并返回。程序集现在已作为托管模块添加,现在我收到一个错误:“System.Web.HttpException:无法加载类型…”,这表明找不到dll。dll是否需要位于特定位置?我已将其复制到“inetsrv”文件夹中。该程序集也安装在GAC中。您可以尝试通过IIS管理器添加它吗?如果我使用gacutil将该程序集安装到GAC中,它将位于另一个GAC文件夹(%windir%\Microsoft.NET\assembly\gacmsil),因为它是一个.NET 4.0项目
<add name="MyName" type="NameSpace.ClassName" preCondition="managedHandler,runtimeVersionv4.0" />