WebApi 部署到win7 IIS详细步骤

以下是将你开发的 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 功能"

  1. Win + R,输入 appwiz.cpl → 回车(打开"程序和功能")
  2. 左侧点击 "打开或关闭 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 中发布项目

  1. 右键你的 Web API 项目 → "发布"
  2. 发布方法:文件系统
  3. 目标位置:例如 C:\ImageServerApp
  4. 配置:Release
  5. 点击 "发布"

发布后目录结构应类似:

复制代码
C:\ImageServerApp\
├── bin\
│   ├── YourApp.dll
│   └── ...
├── Logs\              ← 日志目录(首次运行创建)
├── web.config
├── Global.asax
└── ...

步骤 2:设置图片存储目录(与配置一致)

  • 默认你在 web.config 中配置了:

    xml 复制代码
    <appSettings>
      <add key="ImageFolder" value="C:\ImageServer" />
    </appSettings>
  • 手动创建该目录:

    cmd 复制代码
    mkdir C:\ImageServer

四、配置 IIS 站点

步骤 1:打开 IIS 管理器

  • Win + R,输入 inetmgr → 回车

步骤 2:添加应用程序池(推荐)

  1. 左侧点击 "应用程序池"
  2. 右侧点击 "添加应用程序池..."
    • 名称:ImageServerAppPool
    • .NET Framework 版本:v4.0.30319(即 .NET 4.x)
    • 托管管道模式:Integrated(集成)
  3. 点击 确定

步骤 3:添加网站或应用程序

方式 A:新建网站(推荐,独立端口)
  1. 右键 "网站""添加网站"
    • 站点名称:ImageServer
    • 物理路径:C:\ImageServerApp
    • 绑定:
      • 类型:http
      • IP 地址:全部未分配
      • 端口:8080(避免与 80 冲突)
    • 应用程序池:选择 ImageServerAppPool
  2. 点击 确定
方式 B:作为默认网站的子应用程序(可选)

如果你已有网站在 80 端口,可添加为子应用(如 /images


五、设置文件夹权限(关键!)

IIS 需要 读写权限 才能:

  • 上传图片到 C:\ImageServer
  • 写入日志到 C:\ImageServerApp\Logs

步骤:

  1. 右键 C:\ImageServer属性安全编辑添加

  2. 输入:

    复制代码
    IIS_IUSRS

    → 点击 "检查名称" → 确定

  3. 勾选权限:

    • 读取和执行
    • 列出文件夹内容
    • 读取
    • 写入 ← 必须!(用于上传/删除)
  4. C:\ImageServerApp 也做同样操作(至少给 写入 权限用于日志)

✅ 权限不足是 90% 部署失败的原因!


六、配置 web.config(关键)

确保 C:\ImageServerApp\web.config 中包含:

xml 复制代码
<configuration>
  <appSettings>
    <add key="ImageFolder" value="C:\ImageServer" />
    <!-- 可选:清理 API 密钥 -->
    <!-- <add key="CleanupApiKey" value="secret123" /> -->
  </appSettings>

  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" 
                 maxRequestLength="51200" 
                 executionTimeout="300" />
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <security>
      <requestFiltering>
        <!-- 允许上传大文件(单位:字节) -->
        <requestLimits maxAllowedContentLength="52428800" />
      </requestFiltering>
    </security>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0"
           path="*."
           verb="*"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

⚠️ maxAllowedContentLength 单位是 字节(52428800 = 50 MB)


七、禁用应用池空闲超时(防止后台任务停止)

  1. IIS 管理器 → 应用程序池
  2. 右键你的 ImageServerAppPool高级设置
  3. 找到 "闲置超时(分钟)" → 改为 0(永不回收)
  4. 点击 确定

否则 IIS 会在 20 分钟无请求后回收应用,导致日志、上传等异常。


八、测试部署

1. 测试 Web API 是否运行

浏览器访问:

复制代码
http://localhost:8080/
  • 如果看到 XML 或错误,说明 Web API 已启动(默认无首页是正常的)
  • 如果看到 IIS 欢迎页,说明端口冲突(改用 8080)

2. 测试上传(用 Postman 或 C# 客户端)

http 复制代码
POST http://localhost:8080/api/image/upload
Content-Type: multipart/form-data

[上传一张 jpg 文件]

预期返回:

json 复制代码
{ "fileName": "body_xxxx.jpg" }

3. 测试下载

http 复制代码
GET http://localhost:8080/api/image/download?name=body_xxxx.jpg

应显示图片。

4. 测试清理(客户端调用)

http 复制代码
DELETE http://localhost:8080/api/image/cleanup?maxAgeMinutes=5

返回:

json 复制代码
{ "deleted": 0, "message": "成功删除 0 个过期图片" }

5. 查看日志

检查 C:\ImageServerApp\Logs\log_20251210.txt 是否有记录。


九、局域网访问(可选)

  1. 关闭 Windows 防火墙(测试用)或

  2. 添加入站规则

    cmd 复制代码
    netsh advfirewall firewall add rule name="ImageServer" dir=in action=allow protocol=TCP localport=8080
  3. 其他电脑访问:

    复制代码
    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 年终止支持,切勿暴露此服务到公网,仅限内网使用。

如需一键部署脚本或完整项目模板,可告知!

相关推荐
我是唐青枫2 小时前
深入理解 C#.NET Interlocked.Increment:原子操作的核心
c#·.net
yue0082 小时前
C# 字符串倒序
开发语言·c#
ejjdhdjdjdjdjjsl5 小时前
C#类型转换与异常处理全解析
开发语言·c#
我是唐青枫7 小时前
深入理解 C#.NET Parallel:并行编程的正确打开方式
开发语言·c#·.net
yue0087 小时前
C# ASCII和字符串相互转换
c#
TypingLearn7 小时前
Perigon.CLI 10.0 重磅发布【AspNetCore开发模板和辅助工具】
c#·.net·aspnetcore
Sheep Shaun8 小时前
STL中的map和set:红黑树的优雅应用
开发语言·数据结构·c++·后端·c#
kylezhao201911 小时前
C# 中常用的定时器详解
开发语言·c#
秋雨雁南飞11 小时前
C# 动态脚本执行器
c#·动态编译
月巴月巴白勺合鸟月半12 小时前
用AI生成一个简单的视频剪辑工具 的后续
c#