ASP.NETは(HttpModuleを、のHttpHandler)のものを知っている必要があります

asp.netアーキテクチャ

非常に便利な2つの以上のインスタンス何か---を習得しなければならない何かを習得する必要がありますAsp.netプロセス要求------------------- HttpModuleをのHttpHandler ------------------ asp.netイベントモデルのメカニズム

-----------------------顧客の要求にページがASPNET_ISAPI.DLLこのダイナミックリンクライブラリによって処理され、要求がCLRを実行するためのaspxファイルをコンパイルするために送られ、その後、2ページのイベントの実行順序Page_InitバックブラウザのHTML --------------------------への流れ:値を初期化するかをPage_Loadを接続します。主に使用IsPostBackプロパティは、メインイベントは、クライアント側のイベントの送達によって引き起こされた最初のページまたはasp.net応答を作成するための一連の操作を実行することでした。このイベント、復元されたページとコントロールのビューステートに先立ち。Page_DataBind:ページレベルの呼び出しでも、単一の制御で呼び出すことができます。DataBind_PreRender:プリレンダリングデータバインディングは、このイベントは、ビューステートを保存し、コントロールをレンダリングする直前に発射されます。Page_Unload:このイベントは、最終的なクリーンアップ作業を実行することです。非決定論的イベントのPage_Error:未処理の例外がページの処理中に発生した場合、励起エラーイベント。Page_AbortTransaction:トランザクションイベント、トランザクショントランザクションは、このイベントが発生し、一般的なショッピングカートを中止された場合。Page_CommitTransaction:あなたが成功している場合は、このイベントの時にトランザクションを発生させます。-------------------------------------------------- ------ Global.asaxのイベント(実行順序)のApplication_Start:興奮アプリケーションがApplication_BeginRquestを開始します。httpリクエストはのApplication_AuthenticateRequestを刺激するために始める:SESSION_STARTを刺激するためのアプリケーションは、要求のhttpを承認:Application_EndRequestセッションの開始を刺激する:最後Htttp要求を興奮のSession_Endはとき:セッションの終わりに興奮Application_End:アプリケーションの終了時のApplication_Errorを刺激する:----------------------刺激ISAPIのエラーが発生します。設定いくつかのWebサーバーを挿入するには、強化されたWebサーバの機能を機能を拡張。ISAPI:拡張機能、Win32のダイナミックリンクライブラリ、などASPNET_ISAPI.DLLとして、ISAPI拡張が通常のアプリケーションとして見ることができる、それがターゲットのHTTPリクエストを扱っています。ISAPI:フィルタ、Webサーバは、関連するフィルタに要求を渡し、その後、フィルタは要求を修正することができ、いくつかの操作などを行います。ASP.NETプロセスが要求された:パイプラインでASP.NETのHTTP要求すべてのモジュールのモデルに基づいて、パイプを。各モジュールは、HTTP要求を受信し、フルコントロールを持っています。HTTPリクエストは、すべてのモジュールを通過すると、最終的にはHTTPハンドラを配置されました。いくつかの処理、および結果だろう、再びHTTPパイプラインモジュールのモジュールスルーを要求するHTTPハンドラ。----------- HttpModuleをISAPIフィルタ(フィルター):IIS自体が動的なページをサポートしていない、彼は唯一の.asp .aspxの.cgiでの.phpのコンテンツの静的なHTMLページをサポートしていることを意味など、IISは、それがテキストとしてそれを使用しますが、これらのサフィックスを処理する方法を知らないクライアントに送信され対処しませんでした。この問題を解決するために、IISはISAPIフィルタと呼ばれる機構を備えています。これは、COMコンポーネントです。ファイルの拡張子は、(例えば、*た.ascx *の.aspxなど)内部登録IIS各拡張を処理するときにASP.NETサービスは、IISに登録します。展開を開始した後、IISが処理できないファイルを処理するための定義の良い方法で、制御はasp.netがASPNET_ISAPI.DLLあり、中に特別な処理コードを処理するためにジャンプします。コードを生成することは、元のHTMLに追加した後、標準のHTMLコードを生成し、プロセスはコードの処理を開始してみましょう、最後のフルHTMLがIISに返され、クライアントにコンテンツを送信し、その後IIS。---------------- .NETアセンブリSystem.Web.IHttpModuleインターフェースを実現している機能フィルタ(ISAPIフィルタ)のHttpModuleをのHttpモジュール。ASP.NET要求処理パイプラインに自身を挿入するために、特定のイベントに自分自身を登録することにより、これらのコンポーネント。ときは、これらのイベントは、ASPを発生します。NETの呼び出しはHTTP要求モジュールに興味があるので、モジュールが要求を処理することができます。時にはそれは、他のシステムでカバーされていないことに注意してください、httpリクエストについてはあまり心配する必要はあり、HttpModuleを内蔵のMachine.configで設定あります。--------------------------------------のHttpHandlerそれは要求を処理するISAPI拡張について機能を実装します(リクエスト)および応答メッセージ(応答)を送信します。HttpHandler IHTTPハンドラ機能によってインタフェースを実装する必要があります。HTTPハンドラは、インタフェース実装System.Web.IHttpHandler .NETコンポーネントです。このインタフェースを実装するクラスは、着信HTTP要求を処理するために使用することができます。これは、HTTPハンドラです。

前回ASPでは、*要求されたファイルは、HTTPリクエストが最初のプロセスでInetinfo.exeという名前の傍受される.aspページでは、このプロセスは、実際にWWWサービスです。それは、ASPページを説明した後、バッククライアントブラウザへのデータストリームを説明しますasp.dllをプロセス、この要求をインターセプトした後。実際にはASP.DLLは----------------------、などASPファイル、ASA、などのファイルの実装の解釈に責任があるIISのISAPIに添付された文書、あります---------------

同様のでは、HTTPリクエストがInetinfo.exeのプロセス(WWWサービス)によってインターセプトされ、クライアントがWebサーバーにページ*の.aspxファイルを要求したとき、それは、ASP ASP.NET HTTPリクエストの処理方法の後にファイルの接尾辞と判断されますリクエストは、ASPNET_ISAPI.DLLとASPNET_ISAPI.DLLに転送されます。このHTTPリクエストパイプラインのHTTPパイプラインを通じてASPNET_WP.EXEプロセスに送信されます、HTTPリクエストがASPNET_WP.EXEプロセスを来るとき、asp.netフレームワークが通過しますhttpRuntime、クライアントに処理結果の後、HTTPリクエストに対処します。------------------------------------ httpリクエストがのhttpRuntime、HTTPリクエストに送信されますHttpApplication工場の呼ばれた容器内に供給され続け、これは容器に入ってくる送信を処理するためのHTTP要求のHttpApplicationインスタンスを与えるだろうし、HTTP要求は、次のいくつかのコンテナに変わります:HttpModuleを - >のHttpHandlerファクトリー - システム内部で処理のHttpHandlerのprocessRequestメソッドは、全体のHTTPリクエストが処理された後>のHttpHandler、クライアントは、対応するものを提供します。プロセスフローのasp.netの枠組みの中で、完全なHTTPリクエスト:HttpRequestの - > inetinfo.exe-> ASPNET_ISAPI.DLL - > HTTPのパイプライン - > ASPNET_WP.EXE - >のhttpRuntime - >のHttpApplicationファクトリー - >のHttpApplication - > HttpModuleを - >のHttpHandlerファクトリー - >のHttpHandler - > あなたが途中でのHttpRequestを傍受し、独自の処理を行いたい場合は、このときの容器に正確にこれを行うにはHttpModuleをHttpHandler.ProcessRequest()、それはのhttpRuntime、それを行うために内部で実行する必要があります。---------------------------------------- ---------- IHttpModuleインターフェイスを達成するために--------------------------- HttpModuleをシステム自体、もちろん、私たち自身のクラスはのIHttpModuleインターフェイスを達成することができ、そのシステムは、HttpModuleをオブジェクトを置き換えることができます。システムのデフォルトASP.NET HttpModuleを:

DefaultAuthenticationModule認証対象が本明細書であることを確認。それは継承できません。リモートユーザーが要求したNTファイルにアクセスする権限を持っていることを確認しFileAuthorizationModule。それは継承できません。フォーム認証を使用するようにASP.NETアプリケーションを有効FormsAuthenticationModule。それは継承できません。PassportAuthenticationModuleサラウンドPassportAuthentication包装サービスを提供しています。それは継承できません。SessionStateModuleは、アプリケーションのセッション状態サービスを提供しています。UrlAuthorizationModuleは、特定のリソースへのアクセスを許可または拒否するURLベースの認証サービスを提供しています。それは継承できません。Windowsの/ IIS認証を使用するASP.NETアプリケーションを有効にWindowsAuthenticationModule。継承することはできません。

-------------------------------------- machine.configファイル内のシステムデフォルトのHttpModuleをコンフィギュレーション、そして我々は関係のweb.configファイルの開発に使用される:要求は時間のプロセスを開始するのHttp場合、それは、どこのページASP.NET Frameworkのディレクトリ内のmachine.configとweb.configファイルのファイルをロードするための要求が続きますマシンは、独自のHttpModuleを用いて構成されて、あなたはまだweb.configファイルで、このマッピングのうち、削除することができますページにあります。

  1. パブリッククラス HelloWorldModule:のIHttpModule   
  2.   
  3. {  
  4.   
  5.     公共 HelloWorldModule()  
  6.   
  7.     {  
  8.   
  9.     }  
  10.   
  11.   
  12.   
  13.     公共の 文字列のModuleName  
  14.   
  15.     {  
  16.   
  17.         取得 {  リターン「HelloWorldModuleを」}   
  18.   
  19.     }  
  20.   
  21.   
  22.   
  23.     // Init関数では、のHttpApplicationに登録   
  24.   
  25.     あなたのハンドラを追加して//イベント。  
  26.   
  27.     公共ボイド のInit(のHttpApplicationアプリケーション)   
  28.   
  29.     {  
  30.   
  31.         application.BeginRequest + =   
  32.   
  33.             (新しい イベントハンドラ(この.Application_BeginRequest));  
  34.   
  35.         application.EndRequest + =   
  36.   
  37.             (新しい イベントハンドラ(この.Application_EndRequest));  
  38.   
  39.     }  
  40.   
  41.   
  42.   
  43.     プライベートボイド Application_BeginRequest(オブジェクトソース、    
  44.   
  45.          EventArgs e)の  
  46.   
  47.     {  
  48.   
  49.     //アクセスするのHttpApplicationとのHttpContextオブジェクトを作成します。  
  50.   
  51.     //リクエストとレスポンスのプロパティ。  
  52.   
  53.         HttpApplicationアプリケーション=(のHttpApplication)源;  
  54.   
  55.         HttpContextコンテキスト= application.Context。  
  56.   
  57.         context.Response.Write("<H1> <フォント色=赤> HelloWorldModule:要求の最初</ FONT> </ H1> <時間>" );  
  58.   
  59.     }  
  60.   
  61.   
  62.   
  63.     プライベート無効 Application_EndRequest(オブジェクトソース、EventArgsの電子)   
  64.   
  65.     {  
  66.   
  67.         HttpApplicationアプリケーション=(のHttpApplication)源;  
  68.   
  69.         HttpContextコンテキスト= application.Context。  
  70.   
  71.         context.Response.Write("<時間> <H1> <フォント色=赤> HelloWorldModule:リクエストの最後</ FONT> </ H1>" );  
  72.   
  73.     }  
  74.   
  75.   
  76.   
  77.     公共ボイド のDispose()   
  78.   
  79.     {  
  80.   
  81.     }  
  82.   
  83. }  
  1. < のsystem.web >  
  2.   
  3.  < のHttpModules >  
  4.   
  5.   < 追加= "HelloWorldModule" タイプ= "HelloWorldModule" />を    
  6.   
  7.  </ のHttpModules >  
  8.   
  9.    </ のsystem.web >  

-------------------------------------------------- ---------------------------------深HttpModuleをAのHTTP要求は、キャプチャされた後、ASP.NETフレームワークに変わりますHttpModuleをとのHttpHandlerは、処理します。hhは、完全に独立していないが、実際には、HM中のhttpリクエストがHHに制御する特定のイベント内で渡しますですが、プロセスの実際の実装は、再び、のHttpHandlerになります完了するのHttpHandler間HM後初期化()のパラメータは、BeginRequestイベント、EndRequestの、AuthentiacteRequestなどを含むイベントの数を、有する、のHttpApplication型である。HttpModuleをHttpModuleを上方制御を戻すためのコード --------------------------------------------------それは--------------- IHTTPハンドラフレームワークは、インターフェイスを提供するプロセスは、HTTPリクエストを実装しなければならない必要がある場合、システムは、達成されるべき規則の数を定義asp.netです。それはあなたが自分自身の情報の流れにHTTPリクエストの特定の種類を扱いたい場合、あなたは合意を達成するために、これらのシステムを実装する必要があり、です。たとえば、処理するためにSystem.Web.UI.PageHandlerFactoryのHttpHandlerと呼ばれるクラスにHTTPリクエストのこのタイプ、ASP.NETフレームワークの意志を処理するための* .aspxのファイル。HHとHM最初のmachine.configのHttpHandlerでWeb.config ASP.NETフレームワークで最も初期荷重のユーザが同じ、のHttpHandlerクラスのシステム、そしてWebアプリケーションのカスタムディレクトリをロードします。しかし、システムとHHの間の関係は、私たちの習慣があり、「報道」、それは我々が「* .aspxの」用にカスタマイズされた場合と言うことです HttpHandlerクラスは、その後、システムは完全にHTTPリクエストのHttpHandler私たち自身に対処するためのクラス定義、およびあなたは完全にこのHTTPリクエストを解決し、取引をする所有する必要があります私たち自身のHttpHandlerクラスにこの権利を処理します。IHTTPハンドラprocessRequestメソッドの最も重要なは、この方法は、コンテナにHttpModuleをのHttpHandlerコンテナから渡された時間の後、フレームワークは、このHTTPリクエストを作るために行うためのHttpHandlerのprocessRequestメソッドを呼び出してHTTPリクエストのHttpHandlerのHttpリクエストを処理するために使用されます実際の契約。フレームワークは、実際に内部のデフォルトIHTTPハンドラコンテナの上に配置するためのHTTPページ要求に直接関係しますが、デフォルトIHTTPハンドラ工場の内側に配置されていません。IHTTPハンドラ工場は、システムの役割はIHTTPハンドラコンテナのスケジューリングと管理の多くは、そうすることの利点は大幅に効率を向上させるために、システムの負荷が強化されて実現しています。

ます。https://www.cnblogs.com/Tim_Liu/archive/2011/04/26/2029477.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33725272/article/details/94724553