码迷,mamicode.com
首页 > 编程语言 > 详细

c#.net的网站出现“正在中止线程””异常的原因和解决方法

时间:2016-07-19 18:23:46      阅读:2005      评论:0      收藏:0      [点我收藏+]

标签:

出现“正在中止线程”异常通常都是由于以下三种原因导致引起,给出解决方案如下:

解决方案:

1、针对Response.End,调用 HttpContext.Current.ApplicationInstance.completeRequest() 方法而不是 Response.End 以跳过 Application_EndRequest 事件的代码执行。 

2、针对Response.Redirect,请使用重载 Response.Redirect(String url, bool endResponse),该重载对 endResponse 参数传递 false 以取消对 Response.End 的内部调用。例如: Response.Redirect ("nextpage.aspx", false); 如果使用此替代方法,将执行 Response.Redirect 后面的代码。 

3、针对Server.Transfer,请改用 Server.Execute 方法。

另解(源自网络):

 

      如果是方法1在IIS 5.5下只要删除就OK了,不过在IIS 6.0和7.0 下又会报出另外一个错误“与远程主机通信时发生错误。错误代码是 0x8007xxxx。”。在网上翻查了一翻资料后,终于找到了解决方法:就是将Response.End();换成Response.Close();帮助对Response.Close()的解释是关闭到客户端的连接而Response.End()的解释是停止该页的执行,并引发Application_EndRequest。也就说用Response.End()程序就直接停止后面的工作了转而触发Application_EndRequest,那么当程序在后面还有代码需要运行时,程序就会抛出ThreadAbortException的异常。

      还有需要了解的就是End方法在不抛出异常时还会调用flush的方法。

      接着来,Response.Close()方法是关闭了连接,也就说程序顺利执行完了所有代码后关闭了连接。对于只运行Flush()后报出的“与远程主机通信时发生错误”,我的理解是当执行了Flush()后在底层马上开始向客户端发送数据,但是Flush()貌似只能指示程序开始连接发送,却没有停止关闭的标识,导致程序报出异常。当然这是在IIS 7.0下会出错(可能在IIS 7.0 开始在调用Flush()后需要显示关闭socket连接)。所以以后再在用完Flush()后最好加上Close()。就像数据库连接一样,用完就关闭连接。

c#.net的网站出现“正在中止线程””异常的原因和解决方法

标签:

原文地址:http://www.cnblogs.com/guoyuqi/p/5685477.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!