4.5 KiB
4.5 KiB
从 Java 迁移到 C# 后端
为什么迁移?
Java 后端在实现 Digest 认证时遇到了问题,虽然密码解密正确,但 WS-Management 认证一直失败(401)。
使用 C# + Intel 官方 SDK 的优势:
- 官方支持 - Intel AMT SDK 是 C# 编写的,Digest 认证已经完美实现
- 开箱即用 - 所有 AMT 协议细节都已处理好
- 可靠性高 - 经过 Intel 官方测试和验证
- 功能完整 - 支持所有 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. 测试
访问:
- API 文档:http://localhost:5000/swagger
- 测试凭据:http://localhost:5000/api/test/test-credential
- 测试 WS-Management:http://localhost:5000/api/test/test-wsman/192.168.8.111
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 版本的数据:
- 导出 Java 数据库(H2)
- 转换为 SQLite 格式
- 导入到 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:
- 停止 C# 后端
- 重新启动 Java 后端:
cd backend mvn spring-boot:run
支持
如果遇到问题:
- 检查 .NET SDK 是否正确安装
- 确认 Intel.Management.dll 路径正确
- 查看后端日志
- 检查防火墙设置
总结
C# 版本使用官方 SDK,应该能完美解决 Digest 认证问题。所有功能都已实现,API 完全兼容,前端无需修改。