[英]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的评论是正确的。
我写的类库是一个托管模块。 在我去过的几乎所有指南/教程中都不清楚。 因此,我做了以下工作:
将.dll注册到全局程序集缓存(GAC)
使用gacutility将程序集注册到GAC(如果未安装gacutility.exe,则可以下载Windows SDK)
在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.