Quando um System.Web.HttpResponse.End ASP.NET () é chamado, o segmento atual é abortada?
-
21-08-2019 - |
Pergunta
Quando um System.Web.HttpResponse.End () é chamado de System.Thread.Abort está sendo demitido, o que eu estou supondo que é (ou incêndios) uma exceção? Eu tenho algum registro e isso está sendo listado no arquivo de log ...
A primeira chance
exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll
12/14/2008 01:09:31::
Error in Path :/authenticate
Raw Url :/authenticate
Message :Thread was being aborted.
Source :mscorlib
Stack Trace : at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()
at DotNetOpenId.Response.Send()
at DotNetOpenId.RelyingParty.AuthenticationRequest.RedirectToProvider()
at MyProject.Services.Authentication.OpenIdAuthenticationService.GetOpenIdPersonaDetails(Uri serviceUri) in C:\Users\Pure Krome\Documents\Visual Studio 2008\Projects\MyProject\Projects\Services\Authentication\OpenIdAuthenticationService.cs:line 108
at MyProject.Mvc.Controllers.AuthenticationController.Authenticate() in C:\Users\Pure Krome\Documents\Visual Studio 2008\Projects\MyProject\Projects\MVC Application\Controllers\AuthenticationController.cs:line 69
TargetSite :Void AbortInternal()
A first chance exception of type 'System.Threading.ThreadAbortException' occurred in Ackbar.Mvc.DLL
An exception of type 'System.Threading.ThreadAbortException' occurred in Ackbar.Mvc.DLL but was not handled in user code
É este o comportamento normal e é possível graciosamente abort em vez de (o que parece ser) um abort abrupta repentina?
Atualização
Até agora, o censo comum que é por design . Então, eu estou querendo saber se é possível que poderia levar esta questão e ver se poderíamos ajustar o código para torná-lo não sinto que nós estamos terminando o segmento prematuramente e graciosamente saída ... Possível? exemplos de código?
Outras dicas
Não existe tal coisa como um abort "graciosa". Você poderia simplesmente flush () a resposta, porém, em vez de acabar com ela e deixar o quadro cuidar de fechar a conexão para você. Estou assumindo que, neste caso, que deseja que a resposta enviada para o cliente, ou seja, o caso típico.
De acordo com a MSDN , chamando Response .End () lança a ThreadAbortException quando a resposta termina prematuramente. Você realmente só deve chamar Response.End () quando você quer a exceção levantada.
Não há nada inerentemente deselegante sobre uma exceção recursivo até sua pilha para parar a execução atual. Certamente não mais do que você lançar uma exceção e captura-lo em algum lugar mais baixo na sua exceção.
Eu olhava para filtrá-la de seu registro. Se você estiver usando a saúde ASP.Net monitoramento Você pode configurar / mapear cada exceção a um determinado prestador (log de eventos, e-mail, etc) para controlar se você receber uma notificação para ThreadAbort exceções ou não. Se é log personalizado, em seguida, eu tinha acabado de adicionar um caso para verificar se há-lo.
Note que você não pode comer um ThreadAbortException por isso mesmo se o seu código de registro está fazendo algo como catch(Exception e) { // log exception and then do not throw again }
o ThreadAbortException ainda será levantada novamente pela estrutura uma vez que suas saídas bloco catch.
Não use método Response.End () porque ele usa Application.End () e interromper o aplicativo. Pedido de mais uso HTTP ou resposta violar página do Ciclo de Vida. Use HttpContext.Current.Response.Close () ou HttpContext.Current.ApplicationInstance.CompleteRequest ();
Eu usei todas as alterações acima, mas ainda eu estava ficando mesmo problema no meu aplicativo web.
Em seguida, entrei em contato com a minha hospedagem fornecer e pediu-lhes para verificar se algum software ou antivírus bloqueando nossos arquivos para transferência via HTTP. ou ISP / rede não está permitindo que arquivo para transferir.
Eles checaram as configurações do servidor e de desvio do "Centro Firewall Shared Data" para o meu servidor e agora o nosso aplicativo foi iniciado para baixar o arquivo.
Hope esta resposta vai ajudar someone.This é o que funcionou para mim