gpt4 book ai didi

iis-7 - 在 IIS 7 中注册的模块不起作用

转载 作者:行者123 更新时间:2023-12-04 06:07:34 24 4
gpt4 key购买 nike

我创建了一个小型类库,其中包含一个 HttpModule,它使用过滤器向 IIS7 提供的每个请求页面添加一些 html。

我首先通过在测试网站的 web.config 中注册模块来测试它,它可以正常工作,但仅在那个应用程序中。

我生成了一个 dll,并创建了一个强命名程序集。

我需要以某种方式将此程序集添加为服务器级别的 IIS 中的模块,以便它适用于所有请求、所有应用程序以及非 asp.net 内容。

到目前为止,我已经尝试将 .dll 添加为 native 模块。这行不通。它在 native 模块列表中,但它不起作用。

我已经在 GAC 中安装了 .dll。

继续阅读,似乎我必须将程序集添加为托管模块,然后在 IIS 的“添加托管模块”下的下拉列表中选择它。

为此,我尝试使用命令行工具 appcmd,写道:“添加模块/名称:字符串/类型:字符串/preCondition:字符串”

我这样做没有成功,因为我不知道要设置什么作为类型和前提条件。

正如我所读到的,在 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" />

这使得模块在对 .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 应用程序或托管处理程序的请求调用呢?

关于iis-7 - 在 IIS 7 中注册的模块不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9210550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com