DNN 9.11.0站点随机出现发送异常,咨询原因及关闭更新API方法
问题描述
同一服务器上的多个DNN 9.11.0站点(包括未添加第三方模块的全新站点)会随机触发以下General Exception日志:
AbsoluteURL:/API/personabar/serversummary/GetUpdateInfo
Message:基础连接已关闭: 发送时发生意外错误。
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
at Dnn.PersonaBar.UI.Services.ServerSummaryController.GetJsonObject[T](String url)
at Dnn.PersonaBar.UI.Services.ServerSummaryController.RetrieveUpdateUrl(CacheItemArgs args)
InnerMessage:无法从传输连接读取数据: 远程主机强制关闭了一个现有的连接。
同时浏览器开发者工具报错:Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
目前站点功能无异常,但该API为模块更新检查接口,担忧异常会引发未知问题,访问各类页面(包括故意输入错误URL测试404页面)时偶尔出现该日志。
疑问:是否为防火墙问题?能否关闭该API调用?
问题分析与解决方案
1. 是否为防火墙问题?
大概率是防火墙或内网网络策略导致的:
- 该API的作用是向DNN官方服务器发起更新检查请求,企业内网通常会限制出站流量,防火墙可能会拦截这类请求,或者在请求过程中强制断开连接,从而触发日志中“远程主机强制关闭连接”的错误。
- 异常随机出现的原因,可能是防火墙规则并非严格拦截,而是在流量检测过程中偶尔触发断开机制,也可能是DNN官方服务器响应不稳定导致连接中断。
2. 能否关闭该API调用?
可以通过以下几种方式禁用更新检查功能,从而阻止该API的触发:
方式一:后台配置关闭更新检查
- 登录站点Persona Bar,进入
Settings > Site Settings > Advanced Settings > Other Settings - 找到
Check for Updates选项,设置为False后保存配置。
方式二:修改web.config配置
- 打开站点根目录下的
web.config文件,添加或修改以下配置项:
<add key="AutoUpdate.Enabled" value="false" /> <add key="AutoUpdate.CheckFrequency" value="0" />
- 保存文件后,站点将不再发起更新检查请求,该API调用也会停止。
方式三:批量禁用(适用于多站点场景)
如果需要批量处理服务器上的多个站点,可以自定义DNN扩展,在启动时禁用ServerSummaryController中的更新检查逻辑,或者通过依赖注入替换相关服务实现。这种方式需要具备一定的DNN开发能力。
额外说明
- 禁用更新检查后,站点将不再自动检测DNN核心及模块的更新,需要手动关注官方更新信息并执行升级操作。
- 浏览器开发者工具中的
Unchecked runtime.lastError错误,通常与浏览器扩展或前端通信有关,和该API异常无直接关联,可忽略或排查浏览器端扩展问题。
内容的提问来源于stack exchange,提问作者cpalmer60

