5

わかりました、ASP.Net が内部でどのように機能するかについてもっと知りたいと思っています。MVC や Webforms などのフレームワークの下を意味します。

基本的に、これらのフレームワークが IIS で動作するように ASP.Net にどのように接続されているかを知りたいです。IIS で動作し、MVC も Web フォームも使用しない単純な HttpApplication を作成するための最低限の要件は何でしょうか? Web.config に最低限必要なものは何ですか? Global.asax には何が追加されますか?

4

2 に答える 2

7

から継承するクラスを作成しIHttpHandlerます。インターフェイスの定義は次のとおりです。

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

HttpContextアプリケーションを実行するために必要なのはそれだけです。インタラクションに関わるすべてのもののファサードとして機能します。プロパティはServer、サーバーに関する情報を提供します。プロパティはRequestHttpRequest に関する情報を提供し、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を参照してください。

これが役立つことを願っています。あなたが探しているものをより具体的にしていただければ、より良い情報を提供できます。

于 2011-01-13T19:21:26.477 に答える
2

私は実際にこの質問に自分で答えるつもりでした。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 にあります。

于 2011-01-14T01:58:15.273 に答える