[英]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.