簡體   English   中英

IIS 錯誤 500.2 -1 如何在 IIS Windows 10 中部署一個簡單的自定義處理程序?

[英]IIS Error 500.2 -1 How do I deploy a simple custom Handler in IIS Windows 10?

我正在嘗試在 Windows 10、IIS 10 上自學 IIS 處理程序。當然,我從教程開始

碩士教程

它很舊,但我找不到比這更全面的東西了,而且信息集中在一個地方。

簡單的 class 和 function 是這樣的:

using System;
using System.Web;
namespace IISHandler {
class MyHandler : IHttpHandler {
    public bool IsReusable
    {
        get { return true; }
    }
    public void ProcessRequest(HttpContext context) {
        DateTime dt;
        String useUTC = context.Request.QueryString["utc"];
        if (!String.IsNullOrEmpty(useUTC) &&
            useUTC.Equals("true")) {
            dt = DateTime.UtcNow;
        } else {
            dt = DateTime.Now;
        }
        context.Response.Write(
            String.Format("<h1>{0}</h1>", dt.ToLongTimeString()));

    }
 }
}

我在 VS 2015 中創建了程序集,一切看起來都很好。 直到我試圖“部署”它。 然后一切都崩潰了。

我已經挖了三天了。 沒有任何信息在一個地方。 我將介紹我所做的。 首先,將 DLL 復制到 web 應用程序的 /bin 文件夾中。 沒關系。

然后使用 IIS 管理器中的“添加模塊”選項。 好吧,在默認級別它給了我這個: 添加到 GAC

好的,我不會將此添加到大會。 我想要的只是我的 Web 應用程序中的自定義處理程序。

接下來,仔細觀察,我只將它添加到一個 Web 應用程序中。

該教程說添加模塊會發現它。 好吧,那沒有發生。 我有一個似乎是“內置”的東西的列表,但不是我從教程中創建的 DLL。

模塊列表

所以我手動輸入名稱“IISHandler.MyHandler”,即命名空間(程序集)和 class 名稱。 然后 IIS 經理告訴我這個:

添加失敗

沒有多少 web 搜索給我任何線索如何處理它。

接下來,我決定深入研究 web.config 文件。 當然,MS 頁面會告訴您,您可以獲得所有詳細信息……在未來的某個時間。 快來了

(這是 2008 年發布的。但我對 MS doc 的期望如此之低,沒有什么讓我感到驚訝)

我確實設法在 web.config 上找到了一些其他資源。 因此,在嘗試在 IIS XML 配置文件中獲得碩士學位時,我已經關注以下文件內容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
           <add name="MyTest" path="example.time" verb="*" resourceType="Unspecified"  
             modules="IISHandler.MyHandler" preCondition="integratedMode"  />
       </handlers>
     </system.webServer>
</configuration>

這要做的就是攔截一個頁面請求“example.time”,並根據教程中的原始C#代碼返回當前時間。

回應一直是這樣的:

500錯誤

它並沒有告訴我它找不到模塊,只是說它很糟糕。 但是對於微軟來說,真正的問題是什么並不清楚。

我嘗試(未成功)設置 module="IISHandler" 即使這沒有意義,因為仍然需要知道 class 才能調用。 我是對的,它仍然沒有工作。

繼續搜索,整個 web 都有執行此命令的建議(這沒有意義,因為“功能”已通過控制面板添加):

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

這給了我一個錯誤: cmd失敗

(告訴我在我的 IIS 8 上安裝 .NET 4.5 只是 MS 的另一個缺陷)

我的 IIS 10 的添加/刪除功能未顯示 4.5 但確實顯示 4.8 添加刪除

這很重要嗎? 我不知道,也找不到任何文檔。

我還確保 AppPool 設置為“Integrated”,並且此 Web 應用程序位於該池中應用程序池

但我的選擇只有 .NET 2.0 或 .NET 4.0 ......但添加/刪除為我提供了 3.5,而不是 2.0? 我的程序集是在 .NET 4.8 中構建的(我也在 4 中重試......沒有運氣)。 並且在 IIS 10 下的添加/刪除中沒有 4.0 作為選項。

2.0, 3.5, 4.0, 4.5, 4.8 的拼湊是什么??

但我的問題的真正核心是:讓 IIS 識別我的 C# 程序集並簡單地處理一個簡單的自定義處理程序的過程是什么?

我希望這是足夠的信息,有人可以提供一些幫助。

TIA

-太空人斯科特

具有諷刺意味的是,一位同事(遠程)工作人員正試圖解決同樣的問題。 他告訴我,在我發布此消息幾個小時后,他就開始工作了。

這是 web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <modules>
          <add name="MyModule" type="IISHandler.MyModule" />
        </modules>  
        <handlers>
            <add name="MyHandler" path="example.time" verb="*" resourceType="Unspecified" type="IISHandler.MyHandler" />
        </handlers>
    </system.webServer>
</configuration>

雖然我在IIS XML config文件中仍然沒有碩士或博士學位,但具體的區別是添加了<module>,並且在<handler>中添加了“type”屬性以指示具體的處理程序ZC1C4245268E687384F1C1C

此外,“模塊”屬性已從 <handler> 中刪除,盡管此頁面似乎表明服務器知道在哪里可以找到提供處理程序的模塊。 顯然不是。

<module> 用於在處理序列期間處理所有請求,並且由於不需要該功能,因此沒有手動輸入。 但顯然仍然有必要告訴配置您將使用該組裝模塊。

如果有人遇到類似的問題,也許這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM