#c# #asp.net #.net #iis
#c# #asp.net #.net #iis
Вопрос:
Я пытаюсь самостоятельно обучить обработчику IIS в Windows 10, IIS 10. Естественно, я начал с учебника
Он старый, но я не могу найти ничего более нового, что было бы настолько всеобъемлющим и содержало бы информацию, собранную в одном месте.
Простой класс и функция таковы:
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. Ну, на уровне по умолчанию это дало мне это:
Хорошо, я не добавляю это в общую сборку. Все, что мне нужно, — это пользовательский обработчик в моем веб-приложении.
Далее, уделяя более пристальное внимание, я добавляю его только в одно веб-приложение.
В руководстве говорится, что модуль 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 # в руководстве.
Ответ всегда был таким:
Это не говорит мне, что он не может НАЙТИ модуль, только то, что он плохой. Но с Microsoft никто не знает, в чем настоящая проблема.
Я попытался (безуспешно) просто установить module=»IISHandler», хотя это не имело бы смысла, поскольку что-то все еще должно знать класс для вызова. Я был прав, это все равно не сработало.
И продолжая поиск, по всему Интернету были предложения выполнить эту команду (что не имело смысла, поскольку «функции» уже были добавлены через панель управления).:
%windir%Microsoft.NETFrameworkv4.0.30319aspnet_regiis.exe -я
(Указание мне установить .NET 4.5 на мой IIS 8 — это просто еще один недостаток MS)
Мои функции добавления / удаления для IIS 10 не показывают 4.5, но показывают 4.8
Это важно? Я понятия не имею и не могу найти никакой документации.
Я также заверил, что для 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> , хотя на этой странице, по-видимому, указывалось, что именно так сервер узнал, где найти модуль, предоставляющий обработчик. По-видимому, нет.
<Модуль> используется для обработки всех запросов во время последовательности обработки, и поскольку эта возможность не была желательной, она не была введена вручную. Но, по-видимому, все равно необходимо сообщить конфигурации, что вы будете использовать этот модуль сборки.
Если кто-нибудь столкнется с подобной проблемой, возможно, это поможет.