簡體   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