Thread.Abort在Server.Transfer上发生的错误

时间:2012-08-06 20:15:32

标签: asp.net

Server.Transfer发生的某些情况下,我遇到了一些错误。

线程正在中止。

at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride)     
at System.Web.HttpServerUtility.Execute(String path, TextWriter writer, Boolean preserveForm)     
at System.Web.HttpServerUtility.Transfer(String path)     
at App._Default.TransferToCheckLoginPage() in blahblah\Default.aspx.vb:line 31     
at App._Default.Page_Load(Object sender, EventArgs e) in blahblah\Default.aspx.vb:line 18

线程正在中止。

at System.Threading.Thread.AbortInternal()     
at System.Threading.Thread.Abort(Object stateInfo)     
at System.Web.HttpResponse.End()     
at System.Web.HttpServerUtility.Transfer(String path)     
at App.ASPX.ck_login.TransferToStartPage() in blahblah\ck_login.aspx.vb:line 45     
at App.ASPX.ck_login.Page_Load(Object sender, EventArgs e) in blahblah\ck_login.aspx.vb:line 33

现在奇怪的是传输完成(在某些情况下它没有完成,这就是我对此错误感兴趣的原因)

在server.transfer期间发生了什么ASP.Net生命周期事件?

在一种情况下,当Server.Transfer()指向具有扩展名.aspx(没有页面指令)但内联asp调用< %%>的html页面时,会发生这种情况。 (它有一个指向正常.aspx页面的框架)

由于这是一个当前部署的应用程序,如果我不需要,我不打算对它进行太多更改。我更感兴趣的是知道Server.Transfer进程中的哪一个会中止一个帖子。

3 个答案:

答案 0 :(得分:1)

来自the documentaiton

  

转移到的页面应该是另一个.aspx页面。例如,a   转移到.asp或.asmx页面无效。转移方法   保留QueryString和Form集合。

     

传输调用End,它会抛出一个ThreadAbortException异常   完成。

对于Response.Redirect也是如此(默认情况下,虽然您可以覆盖它。)您可以忽略这些错误。

但是,即使处理在原始页面上结束,处理仍应在转移到的页面上继续。

答案 1 :(得分:0)

是的,确实如此。你可以放心地忽略它

  

此行为是设计使然。

http://support.microsoft.com/kb/312629

答案 2 :(得分:0)

据我所知,Server.Transfer系统抛出线程中止异常,并开始执行新的页面循环。另一方面,Response.Redirect,此方法正确结束响应并将状态302发送到客户端,

HTTP 1.0 302 Object Moved 
Location: http://www.google.com

比客户端请求在回复location中指定的新页面。