IIS托管的RAD Server向第三方服务发起REST请求失败问题求助
故障说明
你遇到的12002错误属于WinINet引擎抛出的请求超时错误,该问题仅在IIS托管场景出现的核心原因是:IIS运行RAD Server的身份权限、运行环境和本地开发环境完全不同,本地开发时RAD Server是用当前登录用户权限运行,而IIS默认用权限受限的内置账户运行服务。
排查解决步骤
调整IIS应用程序池运行身份
首先修改RAD Server对应应用池的运行权限:- 打开IIS管理器,定位到RAD Server站点对应的应用程序池
- 右键点击「高级设置」,找到「进程模型」下的「标识」选项
- 临时切换为「LocalSystem」身份测试功能是否正常(生产环境建议替换为仅具有必要权限的自定义域账户,避免权限溢出)
- 重启应用池后重试接口
修复TRestRequest的服务端兼容性问题
你当前用的TRestRequest默认依赖WinINet引擎,该引擎是为桌面客户端场景设计,在IIS服务端场景下存在权限限制、并发限制的兼容性问题:- 把
TRestClient的HTTPEngine属性切换为WinHTTP引擎,或者直接替换为Indy TIdHTTP组件发起外部请求 - 先在RAD Server所在服务器直接用浏览器访问Jasper Report Server的接口地址,确认网络连通、DNS解析正常,排除基础网络问题
- 把
权限与配置补全
- 给PDF存储的目标目录,授予应用池运行身份的「读写」权限
- 如果你的服务器需要走代理访问外部服务,需要在RAD Server的INI配置文件中添加如下配置:
[Server.Settings] ProxyHost=代理服务器地址 ProxyPort=代理端口 ProxyUsername=代理认证用户名(无认证可省略) ProxyPassword=代理认证密码(无认证可省略)- 在
DownloadReport方法中补充全量异常捕获,将异常详情写入本地日志,避免漏掉底层报错信息:
try RestRequest1.Execute; except on E: Exception do // 写E.Message到本地日志文件 end;确认IIS出站规则未限制
打开IIS管理器,定位到RAD Server站点,点击「IP地址和域限制」->「编辑功能设置」,确认「允许未指定的客户端」选项已勾选,出站请求无额外限制。
内容的提问来源于stack exchange,提问作者A.Joe
相关产品推荐
相关产品推荐

