本文记录了PasteSpider在Windows IIS开发过程中的一些关键问题和思考。虽然最终的应用成果很重要,但开发过程中遇到的问题和解决方案往往更具价值。通过实际项目的历练,我深刻体会到案例项目与实际项目之间的巨大差异。
PasteSpider是一款专为开发者设计的部署工具,新版本支持Windows和Linux系统。通过PasteSpider,开发者可以快速将服务部署到IIS、Linux Service、Docker、Podman、Windows Service等平台上。
在上一篇文章中,我介绍了如何通过贴代码框架中的dynamicform直接编辑JSON内容,并通过动态表配置实现中文显示、字数限制、下拉菜单等功能。本文将重点讲述我为何决定放弃使用***Web.IIS.Administration***。
### 背景
按照最初的设计,PasteSpider的Windows版本需要用户在服务器上安装官方的Microsoft.Web.IIS.Administration,然后通过调用其提供的Rest API来管理IIS。然而,在实际开发过程中,我遇到了一个棘手的问题。
### 遇到的问题
在创建网站时,系统返回了以下错误信息:
```json
{
"title": "Forbidden",
"name": "physical_path",
"detail": "D:\\spider\\iisweb\\abc\\api\\default\\app_11",
"status": "403"
}
看到403错误,我首先想到的是权限问题。于是,我开始逐一排查可能的原因:
Microsoft.Web.IIS.Administration的权限
该服务是以SYSTEM用户身份运行的,理论上拥有最高权限,因此问题可能不在此。
PasteSpider的权限
PasteSpider是以当前用户身份部署在IIS上运行的,并通过全权限的Access_Token访问Microsoft.Web.IIS.Administration。理论上,权限应该绑定在Access_Token上,因此问题可能也不在此。
文件夹权限
网站的文件夹是由PasteSpider创建的,理论上权限应该没有问题。
IIS程序池权限
这是最有可能的问题。IIS在启动网站时,程序池可能对文件夹的权限不足。因为程序池在网站创建之前就已经存在,实际运行时,网站是由程序池执行的。
根据上述思路,我通过DeepSeek询问了相关问题,并得到了详细的解决方案。以下是DeepSeek提供的解决步骤:
检查文件夹是否存在
确认路径是否存在,若不存在则创建。
检查文件夹权限
确保IIS_IUSRS
和IIS APPPOOL\YourAppPoolName
(应用程序池名称)具有读取权限。
检查应用程序池身份
确认应用程序池的身份设置,确保其具有文件夹权限。
检查IIS配置
确保物理路径配置正确。
检查父文件夹权限
确保父文件夹对IIS_IUSRS
或应用程序池身份有读取权限。
检查Web.config文件
确保没有权限限制的配置。
重启IIS
使用iisreset
命令重启IIS。
测试访问
在浏览器中访问网站,确认问题是否解决。
检查IIS日志
如果问题仍未解决,查看IIS日志以获取更多信息。
尽管按照上述步骤进行了配置,问题依然存在。于是,我尝试使用PowerShell来创建网站,结果发现PowerShell可以成功创建网站。然而,这带来了新的问题:PasteSpider需要以管理员身份运行,这意味着它不能部署在IIS内,而必须以控制台模式或Windows Service模式运行。
为了进一步排查问题,我下载了Microsoft.Web.IIS.Administration的源码,发现其权限检查依赖于配置文件中的设置。这意味着在安装Microsoft.Web.IIS.Administration后,用户需要手动修改配置文件,这无疑增加了使用复杂度。
经过一番折腾,我决定对PasteSpider的Windows版本进行如下调整:
下一篇文章将展示PasteSpider Windows版本的初步效果,敬请期待!
```