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

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

相关推荐
m5655bj17 小时前
使用 C# 将 Excel 表格转换为 DataTable
数据库·c#
LcVong17 小时前
基于C#实现斑马ZT411打印机TCP通讯与打印状态精准判定
网络·tcp/ip·c#
2501_9307077818 小时前
使用C#代码在 Word 文档页面中添加装订线
开发语言·c#·word
曲幽18 小时前
C#异步与多线程:从入门到实战,避免踩坑的完整指南
c#·thread·async·await·csharp
初级代码游戏1 天前
C#:程序发布的大小控制 裁剪 压缩
c#·.net·dotnet·压缩·大小·发布·裁剪
量子物理学1 天前
Modbus TCP
c#·modbus tcp
人工智能AI技术1 天前
能用C#开发AI吗?
人工智能·c#
自己的九又四分之三站台1 天前
6. 简单将原生代码改为流式请求
c#
一叶星殇2 天前
C# .NET 如何解决跨域(CORS)
开发语言·前端·c#·.net
JQLvopkk2 天前
C#调用Unity实现设备仿真开发浅述
开发语言·unity·c#