Pergunta

Estou obtendo essa exceção quando tento acessar o objeto httpcontext.current.request.

Eu já vi as respostas em L1, L2 e L3 ... Então ... minha pergunta então é:

Pois para que no mundo são os ihttpmodules agora?

Eu queria desenvolver um módulo que seja atingido toda vez que uma chamada digite para o site de maio, para que eu possa registrar o URL acessado, o endereço IP do usuário, etc ..., mas agora parece que não posso mais fazê -lo no IIS7. Existe alguma solução alternativa? (além de mudar para o "modo clássico").

TEXTO DE ALT HTTP://USERSERVE-AK.LAST.FM/SERVE/126/24432467.JPG

Felicidades.

Foi útil?

Solução

Quando você está fazendo isso? Está em um evento de módulo? Também deve ser perfeitamente factível em um pool integrado. Resumindo, existem alterações sobre como os ganchos do ASP.NET no IIS ao executar em modo integrado que o torna "mais primeira classe". Isso significa que certos eventos disparam antes, por exemplo, Application_Start agora disparará fora do contexto de uma solicitação real. Outros exemplos esperam ter uma identidade autenticada pelo Windows no início do início, pois agora o início do início acontece mesmo antes do IIS autentica, o que não era o caso no passado.

Se o seu aplicativo depende do antigo comportamento ruim, você ainda poderá alterar seu AppPool para executar no modo clássico e funcionará muito bem.

Você deve conseguir a solicitação em quaisquer notificações que sejam específicas, como BeginRequest, EndRequest, Postauthorizerequest, etc. Além disso, eu recomendaria o uso de httpcontext.Current, pois isso incorre em uma pesquisa adicional em uma tabela de hash e geralmente você pode Obtenha o contexto diretamente de outras maneiras, especialmente no contexto de um módulo; portanto, por exemplo, se você lidar com o BeginRequest, poderá fazer:

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

E você salvará a pesquisa.

A partir da sua descrição, parece que você deve implementar um módulo que lida com o BEGNE -REQUEST e ENDEQUEST e você deve ficar bem.

Outras dicas

Eu publiquei isso originalmente como um comentário porque não é realmente uma resposta, mas depois vi que você está procurando um "trabalho por aí", então aqui está minha ideia de uma vida.

/Pp_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

Basicamente, o que você está fazendo é criar uma única classe que faça o mesmo trabalho em cada página carregada, independentemente da página estar sendo carregada. Então cada página do seu aplicativo herdará do BasePage classe para ativá -lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top