远程主机关闭了连接。错误代码是 0x80070057,与远程主机通信时发生错误。错误代码是 0x80070057
程序:
Response.Flush();
Response.End();
环境:IIS7.0以上 服务器 WIN2008R2 .NET3.5
TCP连接断了
?
@谢馥春-xiefuchun.net: 在 Response.Flush() 时,客户端关闭了TCP连接
@dudu: 那么应该如何处理呢?
@谢馥春-xiefuchun.net: 当前的信息太少,无法进行判断
Response.Flush();
Response.End();//结束文件下载
但是程序在运行时会报出“正在中止线程”的错误,可以确定的是引起错误的代码就是Response.End();
所以需要删除此方法。
在IIS 5.5下这样做问题就解决了,不过在IIS 7.0 下又会报出另外一个错误“与远程主机通信时发生错误。错
误代码是 0x800704CD。”
在网上翻查了一翻资料后,终于找到了解决方法:就是将Response.End();换成Response.Close();
总结一下,帮助对Response.Close的解释是关闭到客户端的连接。对Response.End的解释是停止该页的执行,并引发Application_EndRequest。
也就说用Response.End程序就直接停止后面的工作了转而触发Application_EndRequest,那么当程序在后
面还有代码需要运行时,程序就会抛出ThreadAbortException的异常。还有需要了解的就是end方法在不抛
出异常时还会调用flush的方法。
接着来,close方法是关闭了连接,也就说程序顺利执行完了所有代码后关闭了连接。
对 于只运行flush后报出的“与远程主机通信时发生错误”,我的理解是当执行了flush后在底层马上开始向客户端发送数据,但是flush貌似只能指示 程序开始连接发送,却没有停止关闭的标识,导致程序报出异常。当然这是在IIS 7.0下会出错(可能在IIS 7.0 开始在调用flush后需要显示关闭socket连接)。
所以以后再在用完flush后最好加上close。就像数据库连接一样,用完就关闭连接。