Medical Imaging Server for DICOM 是一个开源的 DICOM 服务器,可轻松部署到 Azure。它基于 DICOMweb™ 标准,支持与任何符合 DICOMweb™ 标准的系统进行通信,并将 DICOM 元数据注入到 FHIR 服务器中,以创建完整的患者数据视图。
本项目是 DICOMweb™ 标准的 .NET Core 实现,与 FHIR Server for Azure 紧密集成,使医疗专业人员、ISV 和医疗设备供应商能够创建创新的解决方案。
生产环境建议:推荐使用 Azure Health Data Service DICOM 服务作为托管服务。如需自行部署,请参考维护指南。
Microsoft.Health.Dicom.sln- Visual Studio 解决方案文件,包含所有项目global.json- 指定 .NET SDK 版本(当前为 8.0.201)Directory.Build.props- MSBuild 全局属性配置,定义编译选项、目标框架等Directory.Packages.props- 集中管理 NuGet 包版本GitVersion.yml- GitVersion 配置文件,用于自动版本管理nuget.config- NuGet 包源配置renovate.json- Renovate 自动依赖更新配置CredScanSuppressions.json- 安全扫描排除配置GeoPol.xml- 地理政治合规性配置
核心源代码目录,包含所有主要功能模块:
Microsoft.Health.Dicom.Core- 核心业务逻辑层,实现 DICOMweb™ 标准的核心功能- 包含 DICOM 数据处理、验证、序列化等核心功能
- 定义服务接口和业务模型
- 包含异常处理、扩展方法、消息处理等
Microsoft.Health.Dicom.Api- RESTful API 实现层- 实现 DICOMweb™ REST API 端点
- 包含控制器、中间件、过滤器等
- 处理请求/响应转换和授权决策
Microsoft.Health.Dicom.Web- Web 应用程序宿主- ASP.NET Core Web 应用,用于开发和测试
- 包含前端 UI(OHIF 查看器等)
- 配置文件:
appsettings.json,appsettings.Development.json
-
Microsoft.Health.Dicom.SqlServer- SQL Server 数据访问层- 实现数据库操作和索引管理
- 包含 SQL 脚本和数据库迁移逻辑
- 支持全文搜索和查询优化
-
Microsoft.Health.Dicom.Blob- Azure Blob 存储访问层- 实现 DICOM 文件和元数据的 Blob 存储操作
- 支持上传、下载、删除等操作
- 包含重试策略和并发控制
-
Microsoft.Health.Dicom.Azure- Azure 服务集成- Azure Key Vault 集成
- Azure 特定配置和服务注册
-
Microsoft.Health.Dicom.Functions- Azure Functions 实现- 实现后台任务:数据清理、索引、导出、更新等
- 使用 Durable Functions 处理长时间运行的任务
-
Microsoft.Health.Dicom.Functions.Abstractions- Functions 抽象定义- 定义 Functions 的接口和抽象类
-
Microsoft.Health.Dicom.Functions.Client- Functions 客户端- 提供调用 Functions 的客户端接口
-
Microsoft.Health.Dicom.Functions.App- Functions 应用宿主- Azure Functions 应用的入口点和配置
Microsoft.Health.Dicom.Client- DICOM 客户端库- 提供与 DICOM 服务器交互的客户端 SDK
- 可用于第三方应用集成
-
Microsoft.Health.Dicom.SchemaManager- 数据库架构管理器- 管理数据库架构版本和迁移
-
Microsoft.Health.Dicom.SchemaManager.Console- 架构管理器控制台应用- 命令行工具,用于执行数据库架构更新
-
Microsoft.Health.Dicom.WebUtilities- Web 实用工具- Web 相关的辅助类和扩展方法
Microsoft.Health.Dicom.*.UnitTests- 各模块的单元测试Microsoft.Health.Dicom.Tests.Common- 测试公共库- 包含测试用的 DICOM 文件、测试辅助类等
-
Microsoft.Health.Dicom.Tests.Integration- 集成测试- 测试各组件之间的集成
-
Microsoft.Health.Dicom.Web.Tests.E2E- 端到端测试- 完整的端到端功能测试
dicom-cast- DICOM Cast 转换器- 将 DICOM 元数据同步到 FHIR 服务器的服务
- 包含核心逻辑、表存储、托管应用等
- 支持从 DICOM Change Feed 读取变更并转换为 FHIR 资源
包含各种 Docker Compose 配置文件:
docker-compose.yml- 主配置文件,包含 DICOM 服务器、SQL Server、Azurite 等docker-compose.https.yml- HTTPS 配置docker-compose.https.windows.yml- Windows 平台 HTTPS 配置docker-compose.https.linux.yml- Linux 平台 HTTPS 配置docker-compose.cast.yml- 包含 DICOM Cast 的配置docker-compose.features.yml- 功能特性配置docker-compose.vs.yml- Visual Studio 调试配置docker-compose.ports.azurite.yml- Azurite 端口暴露配置sql/Dockerfile- SQL Server 容器镜像定义
包含 Azure DevOps 的构建管道配置:
-
ci/- 持续集成配置- 部署、发布、测试等 CI 流程
-
common/- 通用构建脚本和模板- 包含可重用的构建步骤
scripts/- PowerShell 构建脚本
-
pr/- Pull Request 构建配置- PR 触发时的测试流程
完整的项目文档:
-
concepts/- 概念文档- DICOM、Change Feed、DICOM Cast、数据分区等概念说明
-
development/- 开发文档- 代码组织、命名规范、异常处理、测试指南等
-
how-to-guides/- 操作指南- 配置、认证、授权、数据导出等操作步骤
-
quickstarts/- 快速入门- Azure 部署、Docker 部署、DICOM Cast 设置
-
tutorials/- 教程- 使用 API、C#/Python/cURL 示例
-
resources/- 资源文档- FAQ、性能指南、健康检查 API、符合性声明等
-
images/- 文档图片资源 -
dcms/- 示例 DICOM 文件- 用于测试的示例 DICOM 文件
开发和测试工具:
-
dicom-web-electron- Electron 桌面应用- 用于上传和管理 DICOM 文件的图形界面工具
- 支持文件上传、Change Feed 查看等功能
-
file-uploader-tool- 文件上传工具- 命令行工具,用于批量上传 DICOM 文件
-
file-generator-tool- 文件生成工具- 用于生成测试 DICOM 文件
-
uploader-function- 上传 Function- Azure Function 形式的文件上传工具
-
Microsoft.Health.Dicom.Tools.sln- 工具解决方案文件
-
templates/- Azure 部署模板- ARM 模板,用于快速部署到 Azure
-
scripts/- PowerShell 脚本- 身份验证、部署相关的 PowerShell 脚本
-
scripts/- 发布脚本- PowerShell 模块和脚本,用于版本发布和部署
-
templates/- 发布模板- 发布相关的 ARM 模板
OpenAPI/Swagger 规范文件:
v1/- API v1 版本规范v1-prerelease/- API v1 预发布版本规范v2/- API v2 版本规范
Microsoft.Health.FellowOakDicom- Fork 的 fo-dicom 库- 包含对原始库的修改和扩展
IsExternalInit.cs- .NET 5+ 的 Init 访问器支持- 用于向后兼容的 C# 语言特性支持
如有 Azure 订阅,可直接部署到 Azure:
<a href="https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2Fdicom-server%2Fmain%2Fsamples%2Ftemplates%2Fdefault-azuredeploy.json" target="_blank"><img src="https://aka.ms/deploytoazurebutton"/></a>
如需将 DICOM 元数据同步到 FHIR 服务器,可部署 DICOM Cast:
详细部署说明请参考:Azure 部署指南
开发环境可使用 Docker 容器进行本地部署,参考:开发环境设置
注意:本地部署使用 Azurite 模拟 Azure Storage API,仅用于开发测试,不适用于生产环境。
- 快速入门:Azure 部署 | Docker 部署 | DICOM Cast 设置
- 教程:API 使用 | C# 示例 | Python 示例 | cURL 示例
- 操作指南:服务器配置 | 身份验证 | 授权 | 数据导出
- 开发文档:环境设置 | 代码组织 | 测试指南
- 资源:FAQ | 符合性声明 | 性能指南
欢迎贡献代码和建议!提交 PR 前需要签署 贡献者许可协议 (CLA)。
贡献方式:
更多信息请参考 贡献指南。
本项目遵循 Microsoft 开源行为准则。
