当调用 System.Web.HttpResponse.End() 时,将触发 System.Thread.Abort,我猜这是(或触发)异常?我有一些日志记录,这些日志记录在日志文件中......

第一次机会

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

这是正常行为吗?是否可以优雅地中止而不是(看起来)突然中止?

更新

到目前为止,普通人口普查是 按设计. 。所以我想知道我们是否可以接受这个问题并看看我们是否可以调整代码以使其不会感觉我们正在结束线程 过早地 并优雅地退出...可能的?代码示例?

有帮助吗?

解决方案

是的,这确实是设计使然。微软甚至还 有记录的 它。还有什么方法可以阻止程序的其余部分执行呢?

其他提示

有没有这样的事情作为一个“正常”中止。你可以简单地冲洗()的响应,但是,而不是结束,并让框架采取关闭你的连接服务。我假设在要发送到客户端,即,典型的情况下,响应该情况下。

根据 MSDN 时,调用响应当响应结束过早.END()抛出的ThreadAbortException。你真的当你想要异常引发只能到Response.End调用()。

有什么本质上非正常有关异常递归你的堆栈停止当前执行。当然,没有比你更抛出异常,并在你的异常低些的地方接住。

我想看看从你的记录对其进行筛选。如果您正在使用ASP.Net健康监测可以配置/映射每个异常给定的供应商(事件日志,邮件等)来控制你是否得到threadabort异常与否的通知。如果是自定义日志记录,那么我再补充一个,如果要检查它。

请注意,如果你的日志代码做类似catch(Exception e) { // log exception and then do not throw again }的ThreadAbortException仍然会通过,一旦你catch块退出框架再次提出你不能吃一个ThreadAbortException所以即便。

不要使用到Response.End()方法,因为它使用Application.End()和停止应用程序。进一步使用HTTP请求或响应违反页生命周期。使用HttpContext.Current.Response.Close()或HttpContext.Current.ApplicationInstance.CompleteRequest();

我使用了上述所有更改,但我的网络应用程序仍然遇到同样的问题。

然后我联系了我的托管提供商并要求他们检查是否有任何软件或防病毒软件阻止我们通过 HTTP 传输文件。或 ISP/网络不允许文件传输。

他们检查了服务器设置并绕过了我的服务器的“数据中心共享防火墙”,现在我们的应用程序开始下载文件。

希望这个答案能帮助别人。这对我有用

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top