Как создать базовое приложение HttpApplication для ASP.Net (без веб-форм или MVC) - PullRequest
5 голосов
/ 22 июля 2010

Хорошо, я хочу узнать больше о том, как ASP.Net работает под капотом.Я имею в виду под MVC или Webforms и другими подобными инфраструктурами.

По сути, я хочу знать, как эти платформы подключены к ASP.Net, чтобы они работали с IIS.Каков будет минимальный уровень для создания простого HttpApplication, который работает с IIS и не использует ни MVC, ни Webforms?Какой минимум должен быть в Web.config?Что будет добавлено в Global.asax?

Ответы [ 2 ]

6 голосов
/ 13 января 2011

Напишите класс, который наследуется от IHttpHandler. Определение интерфейса:

public interface IHttpHandler
{
    void ProcessRequest(HttpContext context);
    bool IsReusable { get; }
}

HttpContext - это все, что вам нужно для выполнения приложения. Он действует как фасад всего, что связано с взаимодействием. Свойство Server предоставляет вам информацию о сервере. Свойство Request предоставляет информацию о HttpRequest, а свойство Response предоставляет средства для вывода вывода клиенту.

Я предлагаю использовать Reflector на HttpContext и почувствовать, что он содержит и как работает каждый из его компонентов.

Вот базовый пример приложения:

public class HelloWorldHandler: IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.Write("Hello World");
        context.Response.End();
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

Global.asax не должен содержать ничего. Вероятно, лучше обрабатывать глобальные события, используя класс, производный от IHttpModule.

web.config должен обрабатываться по-разному, в зависимости от того, используете ли вы IIS 7 или что-то еще. В любом случае, есть раздел HttpHandler, где вы должны зарегистрировать свой собственный обработчик для обработки всех запросов.

Вы можете сделать web.config очень минимальным, но количество включенных разделов конфигурации зависит от того, какие функции вы хотите. Кроме того, некоторые вещи, которые обрабатываются web.config, могут напрямую управляться с помощью IIS. Подробнее см. http://msdn.microsoft.com/en-us/library/b5ysx397(v=VS.85).aspx.

Надеюсь, это поможет. Мы можем предоставить вам более точную информацию, если вы будете более конкретны с тем, что ищете.

2 голосов
/ 14 января 2011

Я действительно хотел ответить на этот вопрос сам, как я это сделал. Smartcaveman предоставляет часть решения.

Что я сделал для web.config:

<?xml version="1.0"?>
<configuration>
    <system.web>
       <compilation debug="true">
       </compilation>
    </system.web>
    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>
    <!--
    The system.webServer section is required for running ASP.NET AJAX under Internet
    Information Services 7.0. It is not necessary for previous version of IIS.
    -->
    <system.webServer>
    </system.webServer>
    <runtime>
    </runtime>
</configuration>

и затем в global.asax:

protected virtual void Application_BeginRequest (Object sender, EventArgs e)
{
    if (Request.Url.AbsolutePath == "/test") 
    {
        var h=new Test1(); //make our Test1.ashx handler
        h.ProcessRequest(Context);
    }
    else
    {
        Response.ContentType = "text/plain";
        Response.Write("Hi world!");
    }
    CompleteRequest();
}

и затем вы можете использовать обработчики ASP.Net для содержимого (как показано) или вы, конечно, можете написать свою собственную замену и написать в Response самостоятельно.

Для справки, мой рабочий каркас, который я сделал с пользовательским механизмом маршрутизации (и механизмом просмотра), находится в subversion здесь

...