Ошибка IIS 500.2 -1 Как мне развернуть простой пользовательский обработчик в IIS Windows 10?

#c# #asp.net #.net #iis

#c# #asp.net #.net #iis

Вопрос:

Я пытаюсь самостоятельно обучить обработчику IIS в Windows 10, IIS 10. Естественно, я начал с учебника

Учебное пособие по MS

Он старый, но я не могу найти ничего более нового, что было бы настолько всеобъемлющим и содержало бы информацию, собранную в одном месте.

Простой класс и функция таковы:

 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) amp;amp;
            useUTC.Equals("true")) {
            dt = DateTime.UtcNow;
        } else {
            dt = DateTime.Now;
        }
        context.Response.Write(
            String.Format("<h1>{0}</h1>", dt.ToLongTimeString()));

    }
 }
}
 

Я создал сборку в VS 2015, и все выглядит нормально. Пока я не попытался «развернуть» его. Тогда все разваливается на части.

Я копаю уже три дня. Ни одна информация не находится в одном месте. Я расскажу о том, что я сделал. Первое, что нужно сделать, это скопировать DLL-файл в папку /bin веб-приложения. Это прекрасно.

Затем используйте опцию «Добавить модуль» в диспетчере IIS. Ну, на уровне по умолчанию это дало мне это: Добавить в GAC

Хорошо, я не добавляю это в общую сборку. Все, что мне нужно, — это пользовательский обработчик в моем веб-приложении.

Далее, уделяя более пристальное внимание, я добавляю его только в одно веб-приложение.

В руководстве говорится, что модуль Add обнаружит его. Ну, этого не произошло. У меня есть список вещей, которые кажутся «встроенными», но не DLL, которую я создал из учебника.

Список модулей

Поэтому я вручную просто ввел имя «IISHandler.MyHandler», который является пространством имен (сборкой) и именем класса. Затем диспетчер IIS сообщает мне следующее:

Добавить сбой

Никакой поиск в Интернете не дал мне никакой подсказки, как с этим справиться.

Далее я решил покопаться в файле 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 # в руководстве.

Ответ всегда был таким:

500Error

Это не говорит мне, что он не может НАЙТИ модуль, только то, что он плохой. Но с Microsoft никто не знает, в чем настоящая проблема.

Я попытался (безуспешно) просто установить module=»IISHandler», хотя это не имело бы смысла, поскольку что-то все еще должно знать класс для вызова. Я был прав, это все равно не сработало.

И продолжая поиск, по всему Интернету были предложения выполнить эту команду (что не имело смысла, поскольку «функции» уже были добавлены через панель управления).:

%windir%Microsoft.NETFrameworkv4.0.30319aspnet_regiis.exe -я

Это выдало мне ошибку: cmdFailure

(Указание мне установить .NET 4.5 на мой IIS 8 — это просто еще один недостаток MS)

Мои функции добавления / удаления для IIS 10 не показывают 4.5, но показывают 4.8 AddRemove

Это важно? Я понятия не имею и не могу найти никакой документации.

Я также заверил, что для AppPool установлено значение «Интегрированный», и это веб-приложение находится в этом пуле AppPool

Но мой выбор — только .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

-SpacemanScott

Комментарии:

1. Попробуйте прочитать это: docs.microsoft.com/en-us/aspnet/web-forms/overview /…

2. @jdweng Какое отношение это имеет к этому вопросу?

3. @jdweng Пожалуйста, остановитесь и подумайте, прежде чем публиковать их. Четко объясните актуальность.

4. Роли должны быть правильными, чтобы иметь возможность подключаться к серверу

5. @jdweng Но как это связано с этим вопросом?

Ответ №1:

По иронии судьбы, коллега (удаленный) работник пытался решить ту же проблему. Он сообщил мне, что он заработал через несколько часов после того, как я опубликовал это.

Вот 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, специфическое отличие заключается в том, что был добавлен <module>, а атрибут «type» был добавлен в <handler> для указания конкретной функции обработчика.

Также атрибут «module» был удален из <handler> , хотя на этой странице, по-видимому, указывалось, что именно так сервер узнал, где найти модуль, предоставляющий обработчик. По-видимому, нет.

<Модуль> используется для обработки всех запросов во время последовательности обработки, и поскольку эта возможность не была желательной, она не была введена вручную. Но, по-видимому, все равно необходимо сообщить конфигурации, что вы будете использовать этот модуль сборки.

Если кто-нибудь столкнется с подобной проблемой, возможно, это поможет.