serverRoom/MIGRATION_TO_CSHARP.md

164 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 从 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 后端(可选)
```powershell
Remove-Item -Recurse -Force backend
```
### 3. 安装 .NET 8.0 SDK
下载https://dotnet.microsoft.com/download/dotnet/8.0
### 4. 运行 C# 后端
```powershell
cd backend-csharp/AmtScanner.Api
dotnet run
```
### 5. 测试
访问:
- API 文档http://localhost:5000/swagger
- 测试凭据http://localhost:5000/api/test/test-credential
- 测试 WS-Managementhttp://localhost:5000/api/test/test-wsman/192.168.8.111
### 6. 前端配置
前端无需修改,但需要确认 API 地址:
`frontend/src/api/config.js`
```javascript
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 后端:
```bash
cd backend
mvn spring-boot:run
```
## 支持
如果遇到问题:
1. 检查 .NET SDK 是否正确安装
2. 确认 Intel.Management.dll 路径正确
3. 查看后端日志
4. 检查防火墙设置
## 总结
C# 版本使用官方 SDK应该能完美解决 Digest 认证问题。所有功能都已实现API 完全兼容,前端无需修改。