我创建了一个小类库,其中一个HttpModule使用过滤器为IIS7提供的每个请求页面添加一些html.
我首先通过在测试网站中的web.config中注册模块来测试它,它可以正常工作,但只能在那个应用程序中运行.
我生成了一个dll,并创建了一个强大的命名程序集.
我需要以某种方式将此程序集作为一个模块添加到服务器级别的IIS中,以便它适用于所有请求,所有应用程序以及nonasp.net内容.
到目前为止,我已尝试将.dll添加为本机模块.这不起作用.它位于本机模块列表中,但不起作用.
我在GAC中安装了.dll.
继续阅读,似乎我必须将程序集添加为托管模块,然后在IIS中的"添加托管模块"下的下拉列表中选择它.
为此,我尝试使用命令行工具appcmd,写道:"add module/name:string/type:string/preCondition:string"
我没有成功这样做,因为我无法弄清楚要设置什么类型和前提条件.
正如我所读到的,在IIS中注册的模块应该适用于所有站点中的所有应用程序以及所有请求.
关键是要避免在每个应用程序web.config文件中注册该模块.
有任何想法吗?
在使用了一点之后,我设法使它工作.
在.net 4.0 GAC中安装程序集不会使其在IIS管理器的"添加托管模块"下的类型下拉列表中可用.
我必须做的是:
创建.net 4.0类库,并将其编译为强命名程序集
使用位于Program Files(x86)\ Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools中的gacutil将其安装在.net 4.0 GAC中
(或者使Visual Studio自动编译,签名并安装程序集)
<modules>在applicationHost.config中添加以下行:(必须手动完成,不能在管理器中完成)
<add name="MyName" type="NameSpace.ClassName" preCondition="managedHandler,runtimeVersionv4.0" />
Run Code Online (Sandbox Code Playgroud)
这使得模块可以运行在.net 4中开发的站点的请求.
但是,对于在.net 4版本中开发的站点的请求似乎无法使用在.net 4.0中创建的模块.因此,如果您在.net 3.5中创建的站点中请求页面,则该模块将无法工作.
另一个观察:
通过applicationHost.config文件将模块添加到IIS后,如果打开IIS管理器,请突出显示连接中的服务器名称并单击模块.您将在列表中看到.net 4模块.
双击它,然后您将看到它的设置.您将看到"复选仅针对ASP.NET应用程序或托管处理程序的请求"复选框已选中.如果取消选中它并点击"确定",则会收到一条错误消息,指出该程序集尚未安装在GAC中.
但是,我不是只是在.net 4 GAC中成功安装它吗?我不是只看到模块在请求中运行?
如果您继续保存设置,则会出现运行时错误,如果查看applicationHost.config,您将看到先前手动添加的模块设置已更改.
但是,如果我想"仅针对ASP.NET应用程序或托管处理程序的请求调用",该怎么办?
我现在能够在每个请求上运行该模块.之前没有工作的原因是我的一个完全不相关的错误.因此,使其工作的步骤是:
当然,让所有代码都运行在所有请求上并不总是一个好主意,因此您可能需要过滤一些请求的文件.
但仍有一个问题!
现在有两个GAC,用于.net 4.0的Microsoft.NET和用于pre .net 4.0的Windows GAC.因为我在.net 3.5中创建了程序集,所以它安装在Windows GAC中,因此它在IIS管理器的类型下拉列表中可用.
当我在.net 4.0中创建程序集时,它已安装在Microsoft.NET GAC中,因此,它在IIS管理器的类型下拉列表中不可用.
问题是:如何在IIS7中将.net 4.0程序集添加为托管模块,并让它像我的3.5托管模块一样运行?
这一定是可能的,对吧?
| 归档时间: |
|
| 查看次数: |
9065 次 |
| 最近记录: |