accepted方法防止“远程主机关闭连接”异常我经常遇到下面的异常,是由于用户启动下载,因此下载失败(或被取消):错误消息:远程主机关闭了连接。错误代码是0x80072746。堆栈跟踪:在System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.FlushCore(Byte[]status,Byte[]headers,Int32keepConnected,Int32totalBodySize,Int32numBodyFragments,IntPtr[]bodyFragments,Int32[]bodyFragmentLengths,Int32doneWithSession,Int32finalStatBoolean&System.Web.Hosting.ISAPIWorkerRequest.FlushResponse(BooleanfinalFlush)atSystem.Web.Hosting.ISAPIWorkerRequest.FlushCachedResponse(BooleanisFinal)async)我搜索了互联网并找到了一篇有趣的文章,但似乎没有一个是明确的答案,因为这是防止此日志填满的最佳方法。用户没有看到任何错误并且应用程序中没有真正的问题,因为它只在我的理解(我认为)在其控制之外的情况下发生(用户取消下载或失去连接)但必须有一种方法来防止报告此类异常。我不想这么说,但我很想检查异常并清空阻塞它的屁股——但这让我觉得自己像个肮脏的程序员。那么-防止此异常填满我的邮箱的可接受方法是什么?您不能阻止远程主机关闭任何东西。在某些协议中,这是正常的(或至少被接受的)告别方式。所以你必须处理这个特定的异常。当您尝试向客户端发送响应但它们已断开连接时,会发生此错误。您可以通过在Response.Redirect或数据发送到客户端的任何地方设置断点来验证这一点,等待VisualStudio命中断点,然后在IE中取消请求(使用地址栏中的x)。这应该会导致错误发生。要捕获错误,您可以使用类似这样的方法:try{Response.Redirect("~/SomePage.aspx");响应.End();}catch(System.Threading.ThreadAbortException){//什么也不做。这通常会在重定向后发生。}catch(System.Web.HttpExceptionex){if(ex.ErrorCode==unchecked((int)0x80070057))//错误代码=-2147024809{//什么都不做。如果浏览器关闭连接,就会发生这种情况。}else{抛出ex;或者在C#6中,您可以使用异常过滤器来防止必须重新抛出错误:try{Response.Redirect("~/SomePage.aspx");响应.End();}catch(System.Threading.ThreadAbortException){//什么也不做。这通常会在重定向后发生。}catch(System.Web.HttpExceptionex)when(ex.ErrorCode==unchecked((int)0x80070057)){//什么也不做。如果浏览器关闭连接,就会发生这种情况。这是一个更好的调试体验,因为它会停止在语句上抛出异常,当前状态和所有局部变量保留而不是在catch块内抛出。从实用的角度来看,通过死掉的计算机或终止的网络会话取消下载并没有错,因此在远程主机关闭时捕获异常是完全可以接受的。以上是C#学习教程:接受的方法是防止所有共享内容出现“远程主机关闭连接”异常。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
