Windows嵌入式开发环境搭建:站点配置与权限设置
|
去年十月,我在客户机房里蹲着调IIS站点——就为那个Windows Embedded Standard 7的远程调试代理页面,绑了个localhost:8081的HTTP站点,目录指到C:\\EmsAgent\\www,照常理该秒开。 结果点进去是502 Bad Gateway,连错都不报具体错误码,F12看Network里状态栏停在“pending”,刷新八次,第八次它突然跳成503 Service Unavailable,再点又回502。我盯着Event Viewer里的Application日志,只看到一条:W3SVC-WP(PID 3824)failed to initialize。没堆栈,没模块名,就这一行,灰底白字,冷得像刚从冰柜里掏出来的硬盘标签。
文章配图,仅供参考 我原以为是AppPool身份设错了,把ApplicationPoolIdentity换成LocalSystem试了——不行;又换回NetworkService,加了IIS_IUSRS对C:\\EmsAgent\\www的读取+执行权限,还手动勾上了“遍历文件夹/运行文件”——还是502。中间王工蹲过来问要不要重启WAS服务,我说先别动,他拧开保温杯喝了一口,茶叶沫子浮在水面上转了三圈,我没吭声。 后来发现ApplicationHost.config里有一行:,但绑定IP其实是0.0.0.0:8081,localhost这个host header根本没被监听——而Windows Embedded自带的HTTP.sys驱动根本不吃localhost这种环回别名解析,它只认通配符或显式IP。可文档里白纸黑字写着“支持localhost binding”,我查的是SP1补丁包后的KB2919355说明页,第七页第二段第三行。(那页右下角印着“Last updated: 2014-03-18”,纸都泛黄了。) 我把bindingInformation改成":8081:",删掉localhost,站点起来了。但第二天客户说手机扫码连不上,我们才想起——嵌入式设备上没装Loopback Adapter,而他们测试用的安卓APP硬编码访问http://localhost:8081/api/status,连DNS都没走,直接往本地回环发包……所以其实不是IIS的问题,是APP写死了域名,而Windows Embedded默认禁用127.0.0.1上的非IE进程回环访问,得改注册表HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\iphlpsvc\\Parameters\\DisableLoopbackCheck=1才行。但我当时不知道这个,王工也不知道,客户开发组的李工在电话里只说:“你们那个站点,能不能让它像Win10一样随便连?” 我按他说的试了——在注册表加了项,重启服务,再测,还是502。因为DisableLoopbackCheck只管TCP层回环绕过,HTTP.sys的host header匹配机制压根不看这个开关。后来查到微软内部bug ID #987321(内部编号,不能公开引用),说Embedded平台HTTP.sys在处理空host header时有状态机竞态,会卡在socket accept后半段不动,等超时后扔502——这事儿2015年就报了,补丁打到SP3也没修,官方态度是“已归类为设计约束”。(那天机房空调坏了,室外三十度,机柜侧面烫手,风扇声像拖拉机在喘气。) 最后妥协方案是加个hosts映射:127.0.0.1 ems-debug.local,然后bindingInformation写成":8081:ems-debug.local",APP那边改域名——两头都动,才算活下来。可客户QA又卡在证书链校验,说Chrome报NET::ERR_CERT_INVALID,我一看证书是自签的,Subject填的是"CN=localhost",但我们现在绑的是ems-debug.local……于是重签,填对CN,导出PFX给设备导入信任库,结果Windows Embedded的certmgr.msc根本不认PFX密码——必须用certutil -importpfx命令带-p参数,还不能带空格。我输错三次密码,第四次成功,第五次导完忘了重启w3svc,第六次……反正第七次它终于绿了,HTTPS也亮锁,API返回{"status":"ready"}。 但那天下午四点二十七分,设备自动断网十分钟,所有站点全部失联,日志里只有一条:Event ID 5002 —— “The HTTP Service rejected the request because the URL was invalid.” 没URL,没时间戳精度,没线程ID,就这一句。王工拍我肩膀说:“你信不信,这系统只要活过三年,自己就能学会编错。” 我没回他,因为我自己也在想:这到底是配置错了,还是它根本不想被配准? 有谁碰到过这个吗 (编辑:航空爱好网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

