以下是将你开发的ASP.NET Web API(.NET Framework)图片服务器部署到Windows 7 + IIS 7.5的完整、详细、可操作步骤。适用于你已实现的功能:
✅ 一、前提条件
1. 系统环境
- 操作系统:Windows 7(专业版/企业版/旗舰版)
- .NET Framework:4.5 或更高(Web API 需要 .NET 4.5+)
- IIS:已启用(见下方“启用 IIS”)
❗ Windows 7 家庭版不支持 IIS,请确认你的版本。
二、启用 IIS 和 .NET 支持
步骤 1:打开“Windows 功能”
- 按
Win + R,输入appwiz.cpl→ 回车(打开“程序和功能”) - 左侧点击“打开或关闭 Windows 功能”
步骤 2:勾选以下功能
☑ Internet Information Services ├─ Web 管理工具 │ └─ IIS 管理控制台 └─ 万维网服务 ├─ 应用程序开发功能 │ ├─ ASP.NET 3.5(可选) │ └─ **ASP.NET 4.5** ← 必须勾选! ├─ 常见 HTTP 功能 │ ├─ 默认文档 │ ├─ 目录浏览 │ └─ 静态内容 └─ 安全性 ├─ 请求筛选 └─ Windows 身份验证(可选)⚠️ 如果列表中没有 “ASP.NET 4.5”,说明你未安装 .NET Framework 4.5。
步骤 3:安装 .NET Framework 4.5(如未安装)
- 安装后重启电脑。
三、准备 Web API 应用
步骤 1:在 Visual Studio 中发布项目
- 右键你的 Web API 项目 →“发布”
- 发布方法:文件系统
- 目标位置:例如
C:\ImageServerApp - 配置:Release
- 点击“发布”
发布后目录结构应类似:
C:\ImageServerApp\ ├── bin\ │ ├── YourApp.dll │ └── ... ├── Logs\ ← 日志目录(首次运行创建) ├── web.config ├── Global.asax └── ...步骤 2:设置图片存储目录(与配置一致)
- 默认你在
web.config中配置了:<appSettings><addkey="ImageFolder"value="C:\ImageServer"/></appSettings> - 手动创建该目录:
mkdir C:\ImageServer
四、配置 IIS 站点
步骤 1:打开 IIS 管理器
- 按
Win + R,输入inetmgr→ 回车
步骤 2:添加应用程序池(推荐)
- 左侧点击“应用程序池”
- 右侧点击“添加应用程序池…”
- 名称:
ImageServerAppPool - .NET Framework 版本:v4.0.30319(即 .NET 4.x)
- 托管管道模式:Integrated(集成)
- 名称:
- 点击确定
步骤 3:添加网站或应用程序
方式 A:新建网站(推荐,独立端口)
- 右键“网站”→“添加网站”
- 站点名称:
ImageServer - 物理路径:
C:\ImageServerApp - 绑定:
- 类型:
http - IP 地址:
全部未分配 - 端口:
8080(避免与 80 冲突)
- 类型:
- 应用程序池:选择
ImageServerAppPool
- 站点名称:
- 点击确定
方式 B:作为默认网站的子应用程序(可选)
如果你已有网站在 80 端口,可添加为子应用(如
/images)
五、设置文件夹权限(关键!)
IIS 需要读写权限才能:
- 上传图片到
C:\ImageServer - 写入日志到
C:\ImageServerApp\Logs
步骤:
- 右键
C:\ImageServer→属性→安全→编辑→添加 - 输入:
→ 点击“检查名称”→ 确定IIS_IUSRS - 勾选权限:
- 读取和执行
- 列出文件夹内容
- 读取
- 写入← 必须!(用于上传/删除)
- 对
C:\ImageServerApp也做同样操作(至少给写入权限用于日志)
✅ 权限不足是 90% 部署失败的原因!
六、配置 web.config(关键)
确保C:\ImageServerApp\web.config中包含:
<configuration><appSettings><addkey="ImageFolder"value="C:\ImageServer"/><!-- 可选:清理 API 密钥 --><!-- <add key="CleanupApiKey" value="secret123" /> --></appSettings><system.web><compilationtargetFramework="4.5"/><httpRuntimetargetFramework="4.5"maxRequestLength="51200"executionTimeout="300"/></system.web><system.webServer><validationvalidateIntegratedModeConfiguration="false"/><modulesrunAllManagedModulesForAllRequests="true"/><security><requestFiltering><!-- 允许上传大文件(单位:字节) --><requestLimitsmaxAllowedContentLength="52428800"/></requestFiltering></security><handlers><removename="ExtensionlessUrlHandler-Integrated-4.0"/><addname="ExtensionlessUrlHandler-Integrated-4.0"path="*."verb="*"type="System.Web.Handlers.TransferRequestHandler"preCondition="integratedMode,runtimeVersionv4.0"/></handlers></system.webServer></configuration>⚠️
maxAllowedContentLength单位是字节(52428800 = 50 MB)
七、禁用应用池空闲超时(防止后台任务停止)
- IIS 管理器 →应用程序池
- 右键你的
ImageServerAppPool→高级设置 - 找到“闲置超时(分钟)”→ 改为
0(永不回收) - 点击确定
否则 IIS 会在 20 分钟无请求后回收应用,导致日志、上传等异常。
八、测试部署
1. 测试 Web API 是否运行
浏览器访问:
http://localhost:8080/- 如果看到 XML 或错误,说明 Web API 已启动(默认无首页是正常的)
- 如果看到 IIS 欢迎页,说明端口冲突(改用 8080)
2. 测试上传(用 Postman 或 C# 客户端)
POST http://localhost:8080/api/image/upload Content-Type: multipart/form-data [上传一张 jpg 文件]预期返回:
{"fileName":"body_xxxx.jpg"}3. 测试下载
GET http://localhost:8080/api/image/download?name=body_xxxx.jpg应显示图片。
4. 测试清理(客户端调用)
DELETE http://localhost:8080/api/image/cleanup?maxAgeMinutes=5返回:
{"deleted":0,"message":"成功删除 0 个过期图片"}5. 查看日志
检查C:\ImageServerApp\Logs\log_20251210.txt是否有记录。
九、局域网访问(可选)
- 关闭 Windows 防火墙(测试用)或
- 添加入站规则:
netsh advfirewall firewall add rule name="ImageServer" dir=in action=allow protocol=TCP localport=8080 - 其他电脑访问:
http://你的Windows7电脑IP:8080/api/image/download?name=xxx.jpg
十、常见问题排查
| 问题 | 解决方案 |
|---|---|
| 404 Not Found | 检查ExtensionlessUrlHandler是否在 web.config 中配置 |
| 500 Internal Error | 查看C:\ImageServerApp\Logs\或 Windows 事件查看器 |
| 上传失败(404/403) | 检查IIS_IUSRS是否有C:\ImageServer写权限 |
| 日志未生成 | 检查C:\ImageServerApp\Logs是否有写权限 |
| API 返回空白 | 确保项目是Release模式发布,且bin目录有 DLL |
✅ 总结
你现在拥有一个部署在Windows 7 IIS上的完整图片服务器,支持:
- 客户端上传/下载/删除
- 定时清理(由客户端触发)
- 配置化目录
- 本地日志排查
💡重要提醒:Windows 7 已于 2020 年终止支持,切勿暴露此服务到公网,仅限内网使用。
如需一键部署脚本或完整项目模板,可告知!