繁体   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