0

HttpContext.Current.Requestオブジェクトにアクセスしようとすると、その例外が発生します。

私はl1l2l3の応答を見てきました ...だから...私の質問は:

IHttpModulesは今、いったい何のためにあるのでしょうか?

5月のWebサイトに電話が入るたびにヒットするモジュールを開発したかったので、アクセスしたURLやユーザーのIPアドレスなどをログに記録できますが、IIS7ではもう実行できないようです。回避策はありますか?(「クラシックモード」への切り替え以外)。

代替テキストhttp://userserve-ak.last.fm/serve/126/24432467.jpg

乾杯。

4

2 に答える 2

4

いつやってるの?モジュールイベントですか?統合プールでも完全に実行可能である必要があります。結論として、統合モードで実行しているときにASP.NETがIISにフックする方法が変更され、「よりファーストクラス」になります。これは、特定のイベントが以前に発生することを意味します。たとえば、Application_Startは実際のリクエストのコンテキスト外で発生します。他の例では、BeginRequestにWindows Authenticated Identityが含まれていると想定しています。これは、IISが認証する前でも、BeginRequestが発生するためです。これは、以前はそうではありませんでした。

アプリケーションが古い不正な動作に依存している場合でも、AppPoolを変更してクラシックモードで実行することができ、問題なく動作します。

BeginRequest、EndRequest、PostAuthorizeRequestなどのリクエスト固有の通知でリクエストを取得できるはずです。また、ハッシュテーブルで追加のルックアップが発生するため、HttpContext.Currentを使用しないことをお勧めします。他の方法、特にモジュールのコンテキストで直接コンテキストを取得するため、たとえば、BeginRequestを処理する場合は、次のことができるはずです。

    HttpApplication application = (HttpApplication)sender;  
    HttpContext context = application.Context;  

ルックアップを保存します。

説明から、BeginRequestとEndRequestを処理するモジュールを実装する必要があり、問題がないように思われます。

于 2010-08-11T21:28:24.790 に答える
0

もともとコメントとして投稿したのですが、実際には答えではないのですが、「回避策」を探しているのを見たので、これが回避策のアイデアです。

/App_Code/BasePage.vb

 Public Class BasePage : Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ''# Do all your logging here
    End Sub
 End Class

/Default.aspx.vb

Partial Class _Default : Inherits BasePage
    ''# This is simply your code behind for each page (notice it inherits BasePage)
    ''# You can still have your Page_Load events along with custom methods in here, 
    ''# and it will not affect the logging portion of your app.
End Class

基本的に、実行しているのは、ロードされているページに関係なく、すべてのページのロードで同じ作業を行う単一のクラスを作成することです。BasePage次に、アプリケーションの各ページは、それをアクティブ化するためにクラスから継承します。

于 2010-08-11T15:55:52.670 に答える