繁体   English   中英

IIS7安装/配置本机模块

[英]IIS7 Installing/Configuring Native Module

我正在学习开发有关为Web应用程序使用的IIS创建模块的信息。 当我将.dll添加到IIS托管的Web应用程序的/ bin文件夹中时,它可以工作。

但是,如果我将此.dll添加到根本地服务器 > 模块 > 配置本机模块注册 它没有用,当我运行一个Web应用程序时,正在使用的AppPool停止了,我从eventviewer中看到的日志是这样的:

在模块DLL%windir%\\ TestWebAgent \\ x86 \\ TestModule.dll中找不到RegisterModule入口点。 数据是错误的。

这是我扩展IHttpModule的类:

using System;
using System.Web;

namespace MyTestModule
{
    public class TestModule : IHttpModule
    {
        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public void Init(HttpApplication application)
        {
            application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
        }

        private void Application_BeginRequest(Object source, EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;

            context.Response.Write("<h1><font color=green>AUTHENTICATED</font></h1><hr>");
        }
    }
}

对于遇到相同问题/问题的任何人。 Lex Li的评论是正确的。

我写的类库是一个托管模块。 在我去过的几乎所有指南/教程中都不清楚。 因此,我做了以下工作:

  1. 将.dll注册到全局程序集缓存(GAC)

    • 要将.dll注册到GAC,必须对其进行签名。 转到项目的属性:Visual Studio>解决方案资源管理器>右键单击项目,然后选择“属性”。
    • 转到“签名”选项卡,选中“对程序集签名”。
    • 选择一个强名称密钥文件,然后选择“新建”
    • 输入密钥文件名
    • 取消选中使用密码保护我的密钥文件,然后单击确定
    • 清理项目并重建
  2. 使用gacutility将程序集注册到GAC(如果未安装gacutility.exe,则可以下载Windows SDK)

    • 要将程序集注册到GAC,可以使用VS Developer Command Prompt(以管理员权限运行)(如果没有VS Developer Command Prompt,则可以使用具有管理员权限的cmd并将目录更改为gacutility.exe的位置)
    • 确认您的dll未注册
    • gacutil / l MyModule.Test(假设您的dll名为MyModule.Test.dll)
    • 要安装:gacutil / i C:/path_to_dll/MyModule.Test.dll
    • 获取公共密钥令牌:gacutil / l MyModule.Test(注意公共密钥令牌,我们将其用于我们的web.config)。
  3. 在Web应用程序的web.config中添加模块:

     <system.webServer> <modules> <add name="MyModule" type="Namespace.ClassName, ProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=999cf99ff999a99e, processorArchitecture=MSIL" preCondition="managedHandler,runtimeVersionv4.0" /> </modules> </system.webServer> 

对于任何在NATIVE MODULES中遇到此错误并且最有可能在x64版中进行编译的人

在模块DLL中找不到RegisterModule入口点

虽然在VC ++项目中仅具有* .def文件似乎适用于Win32 x86编译的DLL。 当将配置管理器切换为发布x64编译的DLL模块(并删除IIS中的Web配置bitness32 )时,您可能会遇到此错误。 您必须在项目属性下的链接器的命令行选项中包括“ / EXPORT:RegisterModule”。

使用本机模块x64 DLL,我沿着这条路径走了好几个小时,试图弄清楚如何构建我的强命名VC ++ DLL。 只是让SN.EXE不断告诉我我的DLL

不代表全名程序集

我得出的结论是,VC ++编译的x64 DLL不能强力命名,这不是解决我的问题的方法。 有时错误消息实际上是问题所在,RegisterModule未被导出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM