IIS部署的Dynaweb迁移新服务器后错误提示仅显示前20字符,原因是什么?
问题原因
以下是该问题的几类常见诱因,按出现概率从高到低排列:
- 32位应用兼容缺失:旧环境为32位Windows Server 2003,老旧Dynaweb程序默认为32位编译,新64位Server 2016的IIS默认未开启32位应用支持,字符串处理时内存读取逻辑异常,直接截断报错信息仅输出前20个字符。
- IIS默认错误截断规则:IIS 7及以后版本默认开启错误响应截断机制,
existingResponse属性默认值会自动裁剪自定义报错的长度,避免敏感信息泄露,和旧版IIS的默认配置逻辑不同。 - 数据库驱动/MDAC兼容问题:旧环境使用低版本MDAC组件,新环境自带的MDAC 10.0版本的错误返回格式和老旧Dynaweb的报错读取逻辑不兼容,仅能读取到前20位缓存的错误信息。
- .NET Framework版本行为变更:旧环境运行依赖低版本.NET Framework,新环境的.NET 4.0对字符串输出、异常处理的底层API做了不兼容调整,未配置兼容模式时会触发输出截断。
解决方案
- 开启32位应用支持:打开IIS管理器,找到对应站点的应用程序池,右键进入「高级设置」,将「启用32位应用程序」调整为
True,重启应用池后验证报错输出。 - 关闭IIS错误截断:在站点根目录的
web.config文件中添加如下配置,保留原始错误输出:
<system.webServer> <httpErrors existingResponse="PassThrough" /> </system.webServer>
如果是ASP类老旧项目,还需要进入IIS的「ASP」配置页,将调试属性下的「将错误发送到浏览器」设为True,「脚本错误消息」选择「详细错误信息」。
- 安装兼容版本数据库驱动:下载安装和旧环境一致的32位SQL Server Native Client驱动,替换系统默认的高版本驱动,解决数据库报错格式兼容问题。
- 配置.NET Framework兼容模式:在
web.config的<system.web>节点下添加如下配置,指定和旧环境一致的.NET运行版本,同时开启详细错误输出:
<customErrors mode="Off" /> <compilation debug="true" targetFramework="你的旧环境.NET版本号" /> <httpRuntime targetFramework="你的旧环境.NET版本号" />
内容的提问来源于stack exchange,提问作者Sarah Richardson
相关产品推荐
相关产品推荐

