远程主机关闭了连接。错误代码是 0x80070057,与远程主机通信时发生错误。错误代码是 0x80070057
远程主机关闭了连接。错误代码是 0x80070057,与远程主机通信时发生错误。错误代码是 0x80070057
突然在异常错误日志中看到这个错误,虽然在测试中发现不影响流的传输,但是不代表没错误,解决方法如下
原理引用下面的文章:
http://hi.baidu.com/yore2003/item/c09da4adc18a1d278819d35a
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。就像数据库连接一样,用完就关闭连接。