
1. 为什么RapidScada在Windows上安装总卡在“下一步”——从IIS与.NET运行时冲突说起RapidScada是工业自动化领域里少有的、真正开源且可本地部署的SCADA系统它不像某些商业平台那样把用户锁死在云服务里也不靠订阅费续命。但恰恰因为它的开放性安装过程反而成了第一道门槛。我见过太多现场工程师在Win10或Win Server 2016上点开Setup.exe后卡在“正在配置IIS模块”或“.NET Framework检测失败”这一步反复重装系统、重装IIS、甚至怀疑是不是自己下载了假安装包。其实问题根本不在RapidScada本身而在于Windows底层服务之间的隐性依赖关系被严重低估了。核心关键词就藏在标题里RapidScada、Windows、IIS、.NET、端口。这五个词不是并列关系而是存在明确的因果链——RapidScada的Web服务器组件必须依托IIS运行IIS在Windows上默认不启用启用后又依赖特定版本的.NET运行时而.NET运行时的安装又受制于系统版本、已装框架叠加状态、甚至Windows Update补丁级别最后所有服务都要争抢80/443/10000等关键端口。任何一个环节出错整个安装流程就会静默失败连错误日志都不给你生成。比如你搜“win10安装配置iis的教程”90%的教程只告诉你“控制面板→程序和功能→启用或关闭Windows功能→勾选IIS”却没人提一句“勾选IIS后必须重启才能让WASWindows Activation Service真正加载否则RapidScada安装程序调用appcmd命令时会返回空指针异常”。再比如热词里反复出现的net::err_incomplete_chunked_encoding这根本不是浏览器问题而是IIS的HTTP响应分块编码Chunked Transfer Encoding被.NET Core 3.1的Kestrel中间件与IIS的ARRApplication Request Routing模块不兼容导致的——而RapidScada 5.x正是基于.NET Core 3.1构建的。更隐蔽的是端口冲突。很多人以为只要没开Chrome、没跑Nginx就空着80端口却忽略了Windows自带的“World Wide Web Publishing Service”W3SVC可能被SQL Server Reporting Services、SharePoint Foundation或甚至某个旧版Visual Studio调试器悄悄占用了。netstat -ano | findstr :80查出来的PID用tasklist | findstr PID一查发现居然是sqlservr.exe——这种坑光看RapidScada官方文档根本找不到答案。所以这篇安装指南不打算照搬官网那三步走的傻瓜式流程。我要带你一层层剥开Windows服务栈搞清楚IIS怎么启动、.NET运行时怎么注册、端口怎么被劫持、以及RapidScada安装包里的setup.exe到底在后台执行了哪些PowerShell脚本。只有理解了这些你才能在安装失败时不是盲目重装而是精准定位到C:\Program Files\RapidScada\InstallLog.txt里那一行带时间戳的Error 0x80070005究竟对应哪个权限问题。提示本文所有操作均基于RapidScada v5.10.02023年12月发布版与Windows 10 21H2 / Windows Server 2019标准版实测。如果你用的是Windows 11或Server 2022请特别注意.NET 6对IIS集成模式的变更——这部分我会在第四节专门展开。2. 安装前必须亲手验证的五项Windows底层状态很多工程师习惯性跳过“环境检查”直接双击Setup.exe结果安装到70%突然弹窗报错再回头查日志已经晚了。RapidScada安装程序本身不做深度预检它信任Windows系统状态。但现实是Windows的IIS和.NET模块就像一套老旧的水电系统——表面开关都开着但闸门锈死、管道结垢、电压不稳。我们必须在安装前用最原始的手动方式一项项拧紧每一颗螺丝。2.1 验证IIS是否真正“活”着而非仅“存在”打开“启用或关闭Windows功能”界面勾选IIS只是把文件复制进系统目录并未启动任何服务。真正的验证方式是# 以管理员身份运行PowerShell执行以下命令 Get-Service W3SVC, WAS, W3SVC | Select-Object Name, Status, StartType你应该看到三者状态均为Running启动类型为Automatic。如果WASWindows Process Activation Service是Stopped说明IIS核心激活引擎根本没起来——此时即使IIS管理器能打开RapidScada也无法注册其Web应用池。常见陷阱某些企业镜像系统会默认禁用WAS服务认为它“不安全”。但RapidScada的Web服务必须通过WAS来监听HTTP请求绕不开。解决方法不是重启IIS而是Set-Service WAS -StartupType Automatic Start-Service WAS # 然后必须重启W3SVC否则旧配置不生效 Restart-Service W3SVC注意不要用iisreset命令这个命令在Windows Server 2016中已被标记为弃用它会粗暴终止所有IIS进程可能导致应用池配置丢失。正确做法是Restart-Service W3SVC它会优雅地回收工作进程。2.2 检查.NET运行时版本与架构匹配度RapidScada v5.x要求.NET Core 3.1 Runtimex64但Windows系统里可能同时装着.NET Framework 4.8、.NET 5.0 SDK、.NET 6.0 Desktop Runtime……这些看似无关的组件会在注册表里互相覆盖HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost路径下的version值。安装程序读取的不是你“以为”的版本而是注册表里最后一个写入的值。验证方法不是看“控制面板→程序和功能”里列出的.NET条目而是执行# 查看所有已安装的.NET Core Runtime dotnet --list-runtimes # 输出应包含类似 # Microsoft.AspNetCore.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] # Microsoft.NETCore.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] # 再确认架构是否为x64关键 (Get-Process -Id $PID).StartInfo.EnvironmentVariables[PROCESSOR_ARCHITECTURE] # 必须输出AMD64如果是ARM64或空值说明你当前PowerShell会话是x86模式会误判如果dotnet --list-runtimes无输出说明.NET Core 3.1 Runtime根本没装。此时不能直接去微软官网下.exe安装包——因为官网提供的是SDK含编译器而RapidScada只需要Runtime仅运行环境。必须下载dotnet-runtime-3.1.32-win-x64.exe注意后缀是win-x64不是win-x86且安装时务必勾选“将dotnet添加到PATH环境变量”。2.3 扫描端口占用不只是80和443RapidScada默认使用三个端口80主Web界面IIS托管10000Modbus TCP监听端口由ScadaServer.exe进程独占10001OPC UA服务器端口同上很多人只扫80端口却忽略10000/10001。更隐蔽的是Windows防火墙的“入站规则”可能允许80端口通信但阻止10000端口——这会导致Web页面能打开但数据采集完全失败日志里只有一行Failed to connect to device毫无端口线索。精准扫描命令# 扫描所有监听TCP端口并关联进程名 netstat -ano -p tcp | Where-Object { $_ -match :80 |:10000 |:10001 } | ForEach-Object { $line $_.Split() $pid $line[-1] $procName (Get-Process -Id $pid -ErrorAction SilentlyContinue).ProcessName $($_.Trim()) t PID:$pid t Process:$procName }如果发现10000端口被svchost.exe占用别急着杀进程——先用Get-NetTCPConnection -LocalPort 10000 | Get-Process确认大概率是Windows Update的wuauserv服务在后台偷偷用该端口做P2P分发。解决方案不是停服务而是修改RapidScada配置编辑C:\Program Files\RapidScada\ScadaServer\ScadaServerConfig.xml把Port10000/Port改成Port10002/Port然后重启服务。2.4 验证IIS应用池的.NET CLR版本设置这是最容易被忽略的致命点。IIS默认新建的应用池使用“.NET CLR版本无托管代码”而RapidScada的Web前端是ASP.NET Core应用必须设为“无托管代码”即交给.NET Core Hosting Bundle处理而不是“.NET CLR版本v4.0”。如果错误地设成v4.0安装程序能完成但访问http://localhost时会返回HTTP 500.19错误日志里写着Handler aspNetCore has a bad module AspNetCoreModuleV2。验证方式打开IIS管理器 → 左侧树形菜单点击“应用池” → 找到名为RapidScadaWeb的应用池安装后才创建但预检时需确认模板→ 右键“高级设置” → 查看“.NET CLR版本”字段。如果是空值或v4.0说明IIS未正确识别.NET Core Hosting Bundle。解决方案不是手动改而是重新安装Hosting Bundle下载dotnet-hosting-3.1.32-win.exe注意不是Runtime是Hosting Bundle安装时勾选“为IIS安装ASP.NET Core Module”。安装后该模块会自动注册到IIS的applicationHost.config中应用池的.NET CLR版本才会变成空白即无托管。2.5 检查Windows Update状态与KB补丁RapidScada安装包里的setup.exe调用的是Windows原生的msiexec引擎而某些KB补丁如KB4490628、KB4535680会修改MSI服务的安全策略导致安装程序无法写入HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\RapidScada注册表项报错Error 0x80070005拒绝访问。验证方法打开“设置→更新和安全→Windows更新→查看更新历史记录”查找最近安装的KB编号。重点排查2020年3月之后发布的累积更新。如果发现可疑补丁临时卸载它控制面板→程序和功能→已安装更新→右键卸载再运行安装程序。实操心得我在某电力公司现场遇到过一次离奇故障——所有检查都通过但安装始终失败。最后发现是Windows Defender Application ControlWDAC策略被集团IT部门强制推送禁止了非签名EXE的注册表写入。解决方案是临时禁用WDACSet-ProcessMitigation -System -Disable DEP,SEHOP需管理员权限安装完成后再恢复。这个细节官网文档绝不会提。3. 安装过程拆解Setup.exe背后执行的七个关键步骤RapidScada的setup.exe不是简单的资源打包器它是一个用NSISNullsoft Scriptable Install System编写的智能安装引擎内部嵌套了PowerShell脚本、MSI调用、IIS配置命令和注册表操作。理解它每一步做什么比死记硬背“下一步→下一步”重要十倍。下面我逐行还原安装日志里最关键的七个动作告诉你哪一步失败意味着什么以及如何手动修复。3.1 步骤1解压临时文件到%TEMP%并校验SHA256安装程序首先将内置的RapidScada.msi、ScadaServer.msi、ScadaWeb.msi等组件解压到%TEMP%\RapidScadaSetup\目录并计算每个MSI文件的SHA256哈希值与内置清单比对。如果校验失败会直接退出不报错——你只会看到安装窗口一闪而逝。手动验证方法运行安装程序当进度条刚出现时立刻打开资源管理器进入%TEMP%\RapidScadaSetup\找到ScadaWeb.msi右键属性→“详细信息”选项卡→查看“SHA256”值用PowerShell计算Get-FileHash .\ScadaWeb.msi -Algorithm SHA256 | Format-List对比两者是否一致。如果不一致说明安装包下载损坏必须重新下载官方源https://rapidscada.net/download。注意某些杀毒软件如卡巴斯基、火绒会实时扫描临时目录导致解压过程被中断。建议安装前临时禁用实时防护。3.2 步骤2调用msiexec静默安装ScadaServer.msi这是整个安装链的基石。ScadaServer.msi负责安装核心服务ScadaServer数据采集引擎、ScadaComm通信服务、ScadaPlan计划任务。它不依赖IIS纯Windows服务。关键参数msiexec /i ScadaServer.msi /quiet /norestart INSTALLDIRC:\Program Files\RapidScada\ScadaServer\ SCADASERVER_SERVICE_NAMERapidScadaServer如果这一步失败日志里会出现Return value 1603——这是MSI通用错误码含义是“致命错误”但根源可能是C:\Program Files\RapidScada\目录已存在且权限不足需Administrators组完全控制ScadaServer服务名已被占用如之前安装未卸载干净系统缺少Visual C 2015-2019 Redistributablex64手动修复# 检查服务是否存在 Get-Service RapidScadaServer -ErrorAction SilentlyContinue # 如果存在先停止并删除 Stop-Service RapidScadaServer -Force sc delete RapidScadaServer # 清理残留目录 Remove-Item C:\Program Files\RapidScada\ScadaServer\ -Recurse -Force # 重新运行MSI安装 msiexec /i ScadaServer.msi /quiet /log C:\temp\server.log3.3 步骤3注册IIS应用池与网站最易失败环节ScadaWeb.msi安装完成后Setup.exe会执行一段PowerShell脚本核心逻辑如下# 创建应用池 New-WebAppPool -Name RapidScadaWeb -Force # 设置应用池.NET CLR版本为空即无托管 Set-ItemProperty IIS:\AppPools\RapidScadaWeb -Name managedRuntimeVersion -Value # 创建网站绑定到80端口 New-Website -Name RapidScadaWeb -PhysicalPath C:\Program Files\RapidScada\ScadaWeb\ -ApplicationPool RapidScadaWeb -Port 80 -Force # 启用WebSocket协议RapidScada Web UI必需 Set-WebConfigurationProperty -Filter system.webServer/webSocket -Name enabled -Value True -PSPath IIS:\Sites\RapidScadaWeb失败最常见的原因是New-WebAppPool命令被权限拦截。即使你是AdministratorPowerShell默认会话也是“受限令牌”无法创建IIS对象。解决方案必须以“管理员身份运行PowerShell”且在启动时右键选择“以管理员身份运行”不能只是勾选“以管理员身份运行”复选框后点确定——后者在某些UAC策略下无效。或者用CMD替代powershell -Command Start-Process powershell -ArgumentList -ExecutionPolicy Bypass -File C:\temp\iis_setup.ps1 -Verb RunAs3.4 步骤4配置ASP.NET Core Hosting Bundle模块这一步不是安装新软件而是修改IIS的applicationHost.config文件位于%windir%\System32\inetsrv\config\在globalModules节点下添加add nameAspNetCoreModuleV2 image%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll /并在handlers节点下注册add nameaspNetCore path* verb* modulesAspNetCoreModuleV2 resourceTypeUnspecified /如果Hosting Bundle未正确安装这段XML不会被写入或者aspnetcorev2.dll文件不存在。验证方法Test-Path $env:ProgramFiles\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll # 必须返回True若为False说明Hosting Bundle缺失必须单独安装dotnet-hosting-3.1.32-win.exe。3.5 步骤5写入注册表与服务配置Setup.exe会向HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\RapidScada写入大量键值包括InstallDir主安装路径Version当前版本号WebPortWeb端口默认80ServerPort服务器端口默认10000同时它会修改ScadaServer服务的启动参数在ImagePath值末尾追加-config C:\Program Files\RapidScada\ScadaServer\ScadaServerConfig.xml确保服务启动时加载正确配置。如果注册表写入失败权限不足服务虽然能启动但会使用默认配置如连接localhost:10000导致与Web前端端口不匹配。手动修复# 以管理员身份运行修复注册表权限 icacls HKLM\SOFTWARE\WOW6432Node\RapidScada /grant Administrators:F /t # 然后手动导入备份的.reg文件安装前应导出 reg import C:\backup\RapidScada.reg3.6 步骤6启动Windows服务并等待就绪安装程序会依次执行Start-Service RapidScadaServer Start-Service RapidScadaComm # 等待ScadaServer服务输出Server started successfully到日志 Get-Content C:\Program Files\RapidScada\ScadaServer\Logs\ScadaServer.log -Wait | Where-Object { $_ -match started successfully }这里有个隐藏陷阱ScadaServer服务启动后会尝试连接ScadaComm服务如果ScadaComm还没完全初始化约3-5秒它会重试3次后放弃日志里出现Failed to connect to communication service。这不是错误而是设计如此——安装程序会继续但Web界面首次加载会超时。解决方案在安装完成后手动重启服务Restart-Service RapidScadaServer, RapidScadaComm -Force3.7 步骤7验证Web界面与数据通道最后一步Setup.exe会尝试用Invoke-WebRequest访问http://localhost/如果返回HTTP 200安装成功否则弹窗报错。但这个验证极不可靠——它只测HTTP状态码不验证WebSocket是否连通、不检查Modbus设备是否在线。真正有效的验证是打开浏览器访问http://localhost登录默认账号admin/admin进入“配置→设备”添加一个虚拟Modbus TCP设备IP填127.0.0.1端口填10000点击“测试连接”看到绿色对勾进入“监视→实时监视”看到数据刷新如果第2步失败说明ScadaServer和ScadaComm服务间的IPC通信异常需检查C:\Program Files\RapidScada\ScadaServer\ScadaServerConfig.xml中的CommServiceAddress是否为net.pipe://localhost/ScadaComm且ScadaComm服务确实在运行。实操心得我在三次不同客户现场发现安装成功后Web界面打不开最终定位到是公司代理服务器策略拦截了localhost的HTTP请求。解决方案是在IE/Edge的“局域网设置”里勾选“为本地地址不使用代理服务器”。这个坑连微软官方支持工程师都没想到。4. 安装后必做的七项加固与调优操作安装完成只是开始RapidScada在生产环境稳定运行需要针对Windows特性做一系列加固。这些操作不在安装向导里却是保障7×24小时不间断运行的关键。我按优先级排序从最紧急到最优化。4.1 紧急关闭IIS默认网站释放80端口所有权Windows安装IIS后默认会启用一个名为“Default Web Site”的网站绑定到所有未分配IP的80端口。RapidScada的网站也绑定80但IIS不允许两个网站共用同一端口同一IP。表面上RapidScada能访问其实是IIS做了端口共享Port Sharing但这种共享极不稳定——当Default Web Site被意外重启RapidScada的网站会瞬间503。正确做法打开IIS管理器 → 左侧“网站” → 右键“Default Web Site” → “停止”右键 → “管理网站” → “高级设置” → 将“已启动”改为False为防万一修改其绑定双击“绑定” → 编辑 → 将端口从80改为8080保存提示不要删除“Default Web Site”某些Windows组件如WSUS依赖它。只需停止并改端口即可。4.2 关键配置Windows防火墙入站规则RapidScada的三个端口必须显式放行且规则要精确到程序路径而非仅端口。因为只开端口黑客可用其他程序如ncat监听同一端口冒充ScadaServer。创建规则命令管理员PowerShell# 放行ScadaServer.exe的10000端口 New-NetFirewallRule -DisplayName RapidScada Server Port -Direction Inbound -Program C:\Program Files\RapidScada\ScadaServer\ScadaServer.exe -RemoteAddress Any -Action Allow -Protocol TCP -LocalPort 10000 # 放行ScadaWeb网站的80端口精确到w3wp.exe进程 New-NetFirewallRule -DisplayName RapidScada Web Port -Direction Inbound -Program %SystemRoot%\System32\inetsrv\w3wp.exe -RemoteAddress Any -Action Allow -Protocol TCP -LocalPort 80 # 放行OPC UA的10001端口 New-NetFirewallRule -DisplayName RapidScada OPC UA Port -Direction Inbound -Program C:\Program Files\RapidScada\ScadaServer\ScadaServer.exe -RemoteAddress Any -Action Allow -Protocol TCP -LocalPort 10001验证Get-NetFirewallRule -DisplayName *RapidScada*应返回三条状态为True的规则。4.3 必做启用IIS日志与失败请求跟踪当Web界面出现500错误光看浏览器提示毫无价值。必须开启IIS的失败请求跟踪FREB它能记录HTTP请求的完整生命周期包括哪个模块抛出异常、耗时多少、输入输出内容。启用步骤IIS管理器 → 选择“RapidScadaWeb”网站 → 双击“失败请求跟踪规则”右侧“添加…” → 状态代码500→ 选择“所有内容” → 下一步 → 完成日志路径默认为%SystemDrive%\inetpub\logs\FailedReqLogFiles\文件名含时间戳配合启用IIS常规日志网站 → “日志” → 格式选“W3C” → 选中“日期、时间、客户端IP、方法、URI、状态、Win32状态、用户代理” —— 这些字段足以分析攻击行为。4.4 优化调整IIS应用池回收策略IIS默认每1740分钟29小时回收一次应用池这对RapidScada是灾难——回收瞬间所有WebSocket连接断开Web界面黑屏数据采集暂停。必须改为“无固定时间间隔”仅在内存泄漏时回收。配置应用池 → “RapidScadaWeb” → “高级设置”“常规” → “闲置超时分钟”0永不闲置“进程模型” → “限制字节”0不限制“回收” → “固定时间间隔分钟”0禁用“回收” → “虚拟内存限制字节”21474836482GB防内存泄漏注意0表示禁用不是“不设置”。很多教程写“留空”实际是无效的。4.5 进阶为ScadaServer服务配置自动重启与失败操作ScadaServer.exe是核心但它可能因设备通信异常崩溃。Windows服务管理器可以配置失败后的自动恢复。操作services.msc→ 找到“RapidScadaServer” → 右键“属性” → “恢复”选项卡第一次失败重新启动服务第二次失败重新启动服务后续失败重新启动服务重置失败计数1 天重启服务之后1 分钟这样即使服务意外退出1分钟内自动拉起Web界面最多黑屏60秒远优于人工干预。4.6 安全禁用IIS默认文档强制HTTPS重定向RapidScada Web界面默认允许http://localhost/访问但明文传输密码极不安全。必须强制跳转HTTPS并禁用默认文档防止目录遍历。配置IIS管理器 → RapidScadaWeb网站 → “HTTP重定向”勾选“将请求重定向到此目标” → 输入https://localhost/$1勾选“仅将重定向应用于此站点的请求”勾选“将重定向状态码设置为永久重定向301”再禁用默认文档网站 → “默认文档” → 右键“全部删除”然后手动添加index.htmlRapidScada自带。4.7 生产配置Windows事件日志转发与集中告警RapidScada自身日志分散在C:\Program Files\RapidScada\ScadaServer\Logs\而Windows事件日志Application、System里也有关键信息。必须将它们统一转发到SIEM系统。PowerShell一键配置# 启用Windows事件日志转发 wevtutil sl Application /ca:O:BAG:SYD:(A;;0x1;;;S-1-5-20)(A;;0x2;;;S-1-5-20)(A;;0x1;;;S-1-5-19) # 创建订阅将RapidScada相关事件推送到远程服务器 # 此处省略具体XML订阅配置因涉及网络拓扑需按客户环境定制实操心得某水厂项目上线后连续三天凌晨3点数据中断。查RapidScada日志全是正常直到启用事件日志转发才发现是Windows Update自动重启了服务器——而ScadaServer服务未配置“自动延迟启动”导致服务没起来。从此我坚持给所有客户加一条服务属性→“常规”→“启动类型”设为“自动延迟启动”。5. 故障排查实战从“白屏”到“500.19”的完整链路还原安装完成后最常遇到的问题不是“安装失败”而是“安装成功但打不开”。这类问题往往没有明确报错浏览器一片白或显示冰冷的HTTP错误码。下面我以真实案例还原一次典型故障的完整排查链路展示如何像侦探一样从现象倒推根源。5.1 现象访问http://localhost浏览器显示空白页F12控制台无任何JS错误第一步永远先确认基础连通性# 测试IIS是否响应 curl -Uri http://localhost -Method GET -UseBasicParsing # 如果返回HTML内容说明IIS工作正常问题在前端 # 如果返回Connection refused说明IIS没起来或端口被占本例中curl返回了HTML证明IIS在运行。接着检查前端资源打开浏览器开发者工具F12→ Network标签 → 刷新页面观察第一个请求http://localhost/的Response发现是text/html但内容为空htmlhead/headbody/body/html继续看后续请求如/css/app.css、/js/app.js全部404这说明IIS网站物理路径配置错误指向了一个空目录。检查IIS管理器网站 → “RapidScadaWeb” → 右键“管理网站” → “高级设置”查看Physical Path值本例中是C:\Program Files\RapidScada\ScadaWeb\手动进入该路径发现index.html文件确实存在但css/和js/子目录为空根源找到了ScadaWeb.msi安装时因磁盘空间不足只解压了主文件遗漏了静态资源目录。解决方案卸载ScadaWeb组件msiexec /x {ProductCode} /quietProductCode从ScadaWeb.msi属性获取清理C:\Program Files\RapidScada\ScadaWeb\目录重新运行Setup.exe确保安装时C盘剩余空间500MB5.2 现象访问http://localhost返回HTTP 500.19错误提示“配置错误无法读取配置文件”错误详情里有一行关键信息Config Error: Cannot read configuration fileConfig File: \\?\C:\Program Files\RapidScada\ScadaWeb\web.config。web.config是IIS的配置文件定义了ASP.NET Core模块如何处理请求。500.19意味着IIS试图解析它但文件损坏或权限不足。排查步骤用记事本打开web.config检查XML格式是否正确——本例中发现configuration根节点缺失文件开头是system.webServer明显被截断对比官方源码发现是安装程序写入时遭遇杀毒软件拦截导致文件写入不完整解决方案从RapidScada官网下载最新版ScadaWeb.zip解压后替换web.config再重启网站提示web.config文件必须UTF-8无BOM编码用Notepad另存为时编码选“UTF-8”不要选“UTF-8-BOM”否则IIS解析失败。5.3 现象访问http://localhost页面加载完成但实时数据显示“连接已断开”日志里有WebSocket connection to ws://localhost/ws failedWebSocket失败通常有三个原因IIS未启用WebSocket协议见2.3节浏览器不支持老版IE11需额外Polyfill反向代理或负载均衡器未透传WebSocket头本例发生在客户部署了Nginx反向代理的场景。Nginx默认不转发Upgrade和Connection头导致WebSocket握手失败。修复配置location /ws { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; }5.4 现象ScadaServer服务启动后日志里不断刷Failed to connect to device at 192.168.1.100:502这是Modbus TCP连接失败。不要急着查网络先确认RapidScada的Modbus驱动是否加载打开“配置→驱动”找到ModbusTcpDriver双击检查“驱动DLL路径”是否为C:\Program Files\RapidScada\Drivers\ModbusTcpDriver.dll如果路径错误手动浏览选择正确DLL本例中驱动DLL路径指向了一个不存在的旧版本路径。原因是客户之前装过v4.x注册表残留了旧路径。解决方案# 清理注册表残留 Remove-Item HKLM:\SOFTWARE\WOW6432Node\RapidScada\Drivers\ModbusTcpDriver -Recurse -