2sxc ImageFlowModule致命异常求助:远程主机关闭连接问题
解决2sxc 16.7 + DNN 9.13.02中Imageflow引发的"Remote Host Closed the connection"致命异常的思路
问题背景
站点运行2sxc 16.7与DNN 9.13.02,近期频繁出现源于ToSic.Imageflow.Dnn.ImageflowModule.NotModified(HttpContext context)及ProcessWithStreamCache等Imageflow调用的**"Remote Host Closed the connection"**致命异常(错误码0x80070057),同一时间点日志中大量重复该异常。
异常日志片段
2024-04-29 05:23:40.528-05:00 [dnn3web][D:2][T:82][FATAL] DotNetNuke.Web.Common.Internal.DotNetNukeHttpApplication - System.Web.HttpException (0x80070057): The remote host closed the connection. The error code is 0x80070057. at System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError(Int32 result, Boolean throwOnDisconnect) at System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush() at System.Web.HttpResponse.Flush(Boolean finalFlush, Boolean async) at System.Web.HttpResponse.Flush() at System.Web.HttpResponse.End() at ToSic.Imageflow.Dnn.ImageflowModule.<ProcessWithStreamCache>d__8.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at ToSic.Imageflow.Dnn.ImageflowModule.<ImageflowRequestAsync>d__5.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar) at System.Web.HttpApplication.AsyncEventExecutionStep.InvokeEndHandler(IAsyncResult ar) at System.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) // 其余重复日志省略
解决建议
针对性捕获并忽略该异常
该异常本质是客户端提前断开图片请求连接,服务器端尝试发送响应时失败。可修改Imageflow模块的错误处理逻辑:在ProcessWithStreamCache或ImageflowRequestAsync方法中,对HttpResponse.End()调用添加try-catch块,捕获System.Web.HttpException且错误码为0x80070057的异常,不输出FATAL日志,避免日志泛滥。优化图片响应缓存策略
配置Imageflow输出正确的缓存响应头,减少重复请求:- 启用浏览器缓存,设置
Cache-Control头为max-age=86400或更长时间 - 确保ETag验证机制正常工作,资源未修改时直接返回304状态码,跳过图片流处理
- 启用浏览器缓存,设置
调整IIS连接超时配置
在IIS管理器中:- 进入站点高级设置,延长"连接超时"时间(默认120秒),减少IIS主动断开连接的概率
- 检查应用程序池的"进程模型",调整闲置超时时间,避免进程频繁回收
升级2sxc至最新稳定版本
2sxc后续版本可能已修复Imageflow模块的异常处理缺陷,查看官方更新日志,升级到兼容DNN 9.13.02的最新2sxc版本(如16.x补丁版或17.x稳定版,需确认兼容性)分流图片请求缓解压力
日志集中在同一时间点,可能是高并发图片请求触发:- 排查访问日志,确认是否存在爬虫或批量图片请求,必要时添加限流规则
- 启用CDN加速图片资源,将图片请求分流至CDN,降低服务器处理压力
内容的提问来源于stack exchange,提问作者ajwaka
相关产品推荐
相关产品推荐

