我正在学习开发有关为Web应用程序使用的IIS创建模块的信息。当我将.dll添加到IIS托管的Web应用程序的/ bin文件夹中时,它可以工作。
但是,如果我将此.dll添加到根本地服务器> 模块> 配置本机模块并注册 >。它没有用,当我运行Web应用程序时,正在使用的AppPool停止了,我从eventviewer中看到的日志是:
无法在模块DLL中找到RegisterModule入口点 %windir%\ TestWebAgent \ x86 \ TestModule.dll。 数据就是错误。
这是我扩展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>");
}
}
}
答案 0 :(得分:0)
对于遇到相同问题/问题的任何人。 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>
答案 1 :(得分:0)
对于 NATIVE MODULES 遇到此错误并最有可能在x64版中编译的任何人
无法在模块DLL中找到RegisterModule入口点
尽管在VC ++项目中仅具有* .def文件似乎适用于Win32 x86编译的DLL。在将配置管理器切换到Release x64编译的DLL模块(并在IIS中删除Web配置 bitness32 )时,您可能会遇到此错误。 您必须在项目属性下的链接器的命令行选项中包括“ / EXPORT:RegisterModule”。
使用我的本机模块x64 DLL,我沿着这条路径走了好几个小时,试图弄清楚如何构建我的强命名VC ++ DLL。只是让SN.EXE不断告诉我我的DLL
不代表全名程序集
我得出的结论是VC ++编译的x64 DLL不能强力命名,这不是解决我的问题的方法。 有时错误消息实际上是问题所在,RegisterModule未被导出。