serverRoom/MIGRATION_TO_CSHARP.md

4.5 KiB
Raw Blame History

从 Java 迁移到 C# 后端

为什么迁移?

Java 后端在实现 Digest 认证时遇到了问题,虽然密码解密正确,但 WS-Management 认证一直失败401

使用 C# + Intel 官方 SDK 的优势:

  1. 官方支持 - Intel AMT SDK 是 C# 编写的Digest 认证已经完美实现
  2. 开箱即用 - 所有 AMT 协议细节都已处理好
  3. 可靠性高 - 经过 Intel 官方测试和验证
  4. 功能完整 - 支持所有 AMT 功能,不仅仅是扫描

已完成的工作

C# 后端已创建

项目结构:

backend-csharp/
├── AmtScanner.Api/
│   ├── Controllers/          # API 控制器
│   │   ├── ScanController.cs
│   │   ├── DevicesController.cs
│   │   └── CredentialsController.cs
│   ├── Models/               # 数据模型
│   │   ├── AmtDevice.cs
│   │   └── AmtCredential.cs
│   ├── Services/             # 业务逻辑
│   │   ├── AmtScannerService.cs
│   │   ├── CredentialService.cs
│   │   └── ScanProgressHub.cs
│   ├── Data/                 # 数据库
│   │   └── AppDbContext.cs
│   ├── Program.cs            # 启动文件
│   └── appsettings.json      # 配置文件
└── AmtScanner.sln            # 解决方案文件

功能对等

C# 版本实现了 Java 版本的所有功能:

  • 网络扫描(多线程)
  • 端口检测16992, 16993, 623
  • WS-Management 认证(使用 Intel SDK
  • 设备信息获取(版本、状态、主机名)
  • 凭据管理(加密存储)
  • 实时进度更新SignalR
  • SQLite 数据库

API 兼容

C# 版本的 API 端点与 Java 版本完全兼容,前端无需修改:

功能 Java 端点 C# 端点 状态
开始扫描 POST /api/scan/start POST /api/scan/start
取消扫描 POST /api/scan/cancel/{id} POST /api/scan/cancel/{id}
获取设备 GET /api/devices GET /api/devices
删除设备 DELETE /api/devices/{id} DELETE /api/devices/{id}
获取凭据 GET /api/credentials GET /api/credentials
创建凭据 POST /api/credentials POST /api/credentials
更新凭据 PUT /api/credentials/{id} PUT /api/credentials/{id}
删除凭据 DELETE /api/credentials/{id} DELETE /api/credentials/{id}

下一步操作

1. 停止 Java 后端

在运行 Spring Boot 的终端按 Ctrl+C

2. 删除 Java 后端(可选)

Remove-Item -Recurse -Force backend

3. 安装 .NET 8.0 SDK

下载:https://dotnet.microsoft.com/download/dotnet/8.0

4. 运行 C# 后端

cd backend-csharp/AmtScanner.Api
dotnet run

5. 测试

访问:

6. 前端配置

前端无需修改,但需要确认 API 地址:

frontend/src/api/config.js

export const API_BASE_URL = 'http://localhost:5000/api'
export const WS_URL = 'http://localhost:5000/scanHub'

数据迁移

从 Java 数据库迁移到 C#

如果需要保留 Java 版本的数据:

  1. 导出 Java 数据库H2
  2. 转换为 SQLite 格式
  3. 导入到 C# 数据库

或者直接重新扫描网络,因为:

  • 扫描很快(几分钟)
  • 数据会自动更新
  • 凭据需要重新添加

测试清单

  • 后端启动成功
  • Swagger 文档可访问
  • 添加凭据admin / Guo1wu3shi4!
  • 设置为默认凭据
  • 开始网络扫描
  • 查看实时进度
  • 验证设备信息(版本、状态)
  • 确认 Digest 认证成功

预期结果

使用 Intel SDK 后,应该能看到:

✓ Successfully connected to AMT device at 192.168.8.111
✓ Digest authentication successful
✓ Got AMT version: 11.8.86
✓ Got provisioning state: POST
✓ Got hostname: ...

回滚方案

如果 C# 版本有问题,可以回滚到 Java

  1. 停止 C# 后端
  2. 重新启动 Java 后端:
    cd backend
    mvn spring-boot:run
    

支持

如果遇到问题:

  1. 检查 .NET SDK 是否正确安装
  2. 确认 Intel.Management.dll 路径正确
  3. 查看后端日志
  4. 检查防火墙设置

总结

C# 版本使用官方 SDK应该能完美解决 Digest 认证问题。所有功能都已实现API 完全兼容,前端无需修改。