Domanda

sto ottenendo che un'eccezione quando si tenta di accedere all'oggetto HttpContext.Current.Request.

Ho visto le risposte a l1 , l2 e L3 ... quindi. .. la mia domanda allora è:

Per quello che nel mondo sono IHttpModules ora?

ho voluto sviluppare un modulo che viene colpito ogni volta che una chiamata entrare al sito maggio, in modo da poter registrare l'URL si accede, l'indirizzo IP dell'utente, ecc ..., ma ora sembra che non posso farlo più in IIS7 . C'è qualche soluzione? (Oltre a passare alla "modalità Classic").

alt text http://userserve-ak.last.fm/serve /126/24432467.jpg

Saluti.

È stato utile?

Soluzione

Quando stai facendo questo? è a un evento di modulo? Dovrebbe essere perfettamente fattibile in un pool integrato pure. Bottom-line ci sono cambiamenti su come ASP.NET si aggancia a IIS durante l'esecuzione in modalità integrata che lo rende "più di prima classe". Questo significa che certi eventi fuoco prima, ad esempio Application_Start sarà ora il fuoco al di fuori del contesto di una richiesta effettiva. Altri esempi si aspettano di avere un Windows autenticato identità nella BeginRequest, dal momento che ora BeginRequest accade anche prima IIS autentica, che non era il caso in passato.

Se la vostra applicazione dipende dalla vecchia cattivo comportamento si può ancora modificare l'AppPool per l'esecuzione in modalità Classic e funzionerà bene.

Si dovrebbe essere in grado di afferrare la richiesta in tutte le notifiche che sono richieste specifiche quali BeginRequest, EndRequest, PostAuthorizeRequest, etc. Inoltre, mi sento di raccomandare di non utilizzare HttpContext.Current dato che comporta un aspetto aggiuntivo in una tabella hash e di solito è possibile ottenere il contesto direttamente in altri modi, specialmente nel contesto di un modulo, così per esempio se si gestisce il BeginRequest, si dovrebbe essere in grado di fare:

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

e vi farà risparmiare la ricerca.

Dalla tua descrizione sembra che si dovrebbe essere l'implementazione di un modulo che le maniglie BeginRequest e EndRequest e si dovrebbe andare bene.

Altri suggerimenti

I postato originariamente come un commento causa non è davvero una risposta, ma poi ho visto che siete alla ricerca di un "lavoro intorno" ecco la mia idea di un lavoro in giro.

/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

In sostanza quello che stai facendo è la creazione di una singola classe che fa lo stesso lavoro su ogni caricamento della pagina indipendentemente dalla pagina che viene caricata. Poi ogni pagina nell'applicazione erediterà dalla classe BasePage per attivarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top