快速入口:快速开始 | Docker部署 | 功能特性 | 配置说明 | 常见问题 | 联系我们
关键词:开源 DICOM SCP、轻量级 PACS、WADO-URI、Worklist、Query/Retrieve、医学影像系统集成。
联系我们
如需云 RIS/PACS、云胶片、MiniPACS、定制开发或医院系统集成,欢迎通过以下方式联系:
添加好友时请备注来意(如:DicomSCP 咨询 / 商业合作),方便及时通过。
微信联系
|
QQ联系
|
微信公众号:医信部落(扫码关注 / 微信搜一搜)
|
🔗 开源组件 vs 商业方案
| 维度 |
DicomSCP(开源) |
商业解决方案 |
| 定位 |
DICOM/PACS 基础服务组件 |
医疗影像完整业务系统 |
| 面向对象 |
开发者 / 研究人员 / AI团队 |
医院 / 医疗企业 / 集成商 |
| 目标用途 |
技术学习 / PoC验证 / 系统联调 |
生产环境部署 / 业务系统建设 |
| 覆盖范围 |
DICOM核心服务能力(SCP / Worklist / Query / WADO等) |
RIS + PACS + 云影像 + 云胶片 + 系统集成 |
| 系统形态 |
独立基础服务组件 |
完整医疗影像业务平台 |
| 部署方式 |
Docker / 本地快速运行 |
私有化部署 / 多院区架构 / 云平台部署 |
| 维护模式 |
社区维护(开源) |
项目制交付 + 定制支持 |
| 扩展能力 |
提供基础接口与协议实现 |
支持医院系统对接(HIS / EMR / AI影像平台) |
商业解决方案部分预览

开源版功能预览

功能特性
WADO 请求示例
| 参数 |
必填 |
说明 |
requestType |
是 |
固定为 WADO |
studyUID / seriesUID / objectUID |
是 |
检查 / 序列 / 实例 UID |
contentType |
否 |
默认 image/jpeg;亦可 application/dicom |
transferSyntax |
否 |
DICOM 传输语法 UID,不传则不转码 |
anonymize |
否 |
yes 时匿名化 |
常用 transferSyntax:1.2.840.10008.1.2(Implicit LE)、1.2.840.10008.1.2.1(Explicit LE)、1.2.840.10008.1.2.4.50(JPEG Baseline)、1.2.840.10008.1.2.4.70(JPEG Lossless SV1)、1.2.840.10008.1.2.4.90(JPEG 2000 Lossless)、1.2.840.10008.1.2.4.80(JPEG-LS)、1.2.840.10008.1.2.5(RLE)。
http://localhost:5000/wado?requestType=WADO&studyUID={StudyUID}&seriesUID={SeriesUID}&objectUID={SOPInstanceUID}&contentType=application/dicom&transferSyntax=1.2.840.10008.1.2.4.70&anonymize=yes
系统要求
- Windows 10/11 或 Windows Server 2012+(亦可使用 Docker 部署于 Linux)
- .NET 8.0 或更高版本(Docker 镜像已内置运行时)
- SQLite 3.x
- 8GB+ RAM
- 100GB+ 可用磁盘空间
- 现代浏览器(Chrome/Firefox/Edge)
构建和发布
Windows 单文件发布
发布为自包含的单文件可执行程序:
dotnet publish -c Release -r win-x64 /p:SelfContained=true /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true /p:DebugType=None /p:DebugSymbols=false
发布后的文件位于:bin/Release/net8.0/win-x64/publish/DicomSCP.exe
快速开始
- 下载最新发布版本 releases
- 修改 appsettings.json 配置文件 appsettings.json
- 运行 DicomSCP.exe
- 访问 http://localhost:5000
- 默认账号 admin / admin
配置说明
主配置文件为运行目录下的 appsettings.json(Docker 见上文挂载路径)。完整字段以仓库内文件为准:
| 配置项 |
说明 |
AeTitle |
C-STORE SCP 的应用实体标题(AE Title) |
StoreSCPPort |
存储服务监听端口(默认 11112) |
StoragePath |
接收影像的归档目录,相对路径相对程序工作目录 |
TempPath |
临时文件目录 |
Advanced |
存储高级选项:ValidateCallingAE / AllowedCallingAEs 控制呼叫方 AE 校验;EnableCompression、PreferredTransferSyntax 等与压缩/传输语法相关 |
WorklistSCP |
工作列表服务:AeTitle、Port(默认 11113)、呼叫方 AE 白名单等 |
QRSCP |
查询检索 SCP:Port(默认 11114)、MoveDestinations 为 C-MOVE 目标节点列表(Name / AeTitle / HostName / Port) |
PrintSCP |
打印 SCP:Port(默认 11115)、AllowedCallingAEs 等 |
PrintSCU |
打印 SCU:Printers 为远端打印节点;IsDefault 指定默认打印机 |
QueryRetrieveConfig(查询检索 SCU)
| 配置项 |
说明 |
LocalAeTitle |
本机作为 SCU 对外使用的 AE Title |
RemoteNodes |
远端节点列表:AeTitle、HostName、Port、Type(如 store / qr)供界面或转发使用 |
Kestrel(Web 与端口)
| 配置项 |
说明 |
Kestrel:Endpoints:Http:Url |
HTTP 监听地址,默认 http://0.0.0.0:5000;改端口后 Docker 需同步 -p |
Kestrel:Limits:MaxRequestBodySize |
请求体大小上限(字节),大文件上传时可按需调大 |
ConnectionStrings(数据库)
| 配置项 |
说明 |
DicomDb |
SQLite 连接串,Data Source 指向库文件路径(默认 ./db/dicom.db);Docker 下建议与挂载的 db 目录一致 |
Logging / Swagger
- Logging:全局
LogPath、RetainedDays;Services 下可按服务(StoreSCP、QRSCP、WADO 等)单独开关文件/控制台日志、级别与目录。
- Swagger:
Enabled 控制是否暴露 API 文档;生产环境可关闭。
修改 DICOM 端口或防火墙策略时,需与设备端 AE、IP、端口配置一致;修改路径后请确保进程对目录有读写权限。
Docker部署
appsettings.json需要先在宿主机目录下创建好!
docker run -d --name DicomSCP --restart unless-stopped \
-p 5000:5000 \
-p 11112-11115:11112-11115 \
-v /opt/docker/dicomscp/keys:/root/.aspnet/DataProtection-Keys \
-v /opt/docker/dicomscp/logs:/app/logs \
-v /opt/docker/dicomscp/received_files:/app/received_files \
-v /opt/docker/dicomscp/temp_files:/app/temp_files \
-v /opt/docker/dicomscp/appsettings.json:/app/appsettings.json \
-v /opt/docker/dicomscp/db:/app/db \
fightroad/dicomscp:latest
常见问题(FAQ)
点击 Weasis 没反应?
界面中的 Weasis 入口会尝试调用本机已安装的 Weasis 客户端打开影像。若未安装或安装路径未注册协议,点击可能无反应。请先安装 Weasis,再重试。
Docker 启动失败?
容器依赖将宿主机的 appsettings.json 挂载进 /app/appsettings.json。请先在宿主机创建好 Docker 命令里各 -v 对应的目录与文件(尤其是 appsettings.json),内容可参考仓库中的示例后再启动容器,避免因缺少文件或目录导致启动失败。
C-MOVE 之后接收不到影像?
C-MOVE 会把影像推到目标存储节点(接收端)。若配置或类型不对,会出现“MOVE 成功但本机收不到”的情况。请检查 appsettings.json 中 QueryRetrieveConfig:RemoteNodes 是否已正确添加该目标节点,且 Type 必须为 store(表示 C-STORE 接收端);AeTitle、HostName、Port 需与对端实际监听一致。
Nginx反向代理
HTTPS 反代示例(按需替换证书路径与域名):
server {
listen 443 ssl;
server_name pacs.example.com;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
client_max_body_size 512m;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_read_timeout 3600s;
}
}
使用的开源项目
本项目使用了以下优秀的开源项目:
感谢这些优秀的开源项目,让本项目得以实现!
赞助项目
如果这个项目对您有帮助,欢迎赞助支持我们继续改进!
微信赞助
|
支付宝赞助
|
您的每一份支持都将帮助我们:
- 🚀 开发新功能
- 🐛 修复已知问题
- 📚 完善项目文档
- 🎨 优化用户体验
赞助时请备注您的信息,我们会将您添加到赞助者名单中。
赞助者
感谢以下赞助者的支持(排名不分先后):
- QQ:生活
- GITEE:mmkangaroo
- GITEE:wisgtalt
- GITEE:longlong159357
- GITEE:Dentalman
- alipay:恒
- wechat:syg
- GITEE:qi-hc
- GITEE:kyo
- GITEE:yunyunvip
- GITEE:三才网络
- GITEE:叶秋梦
- wechat:Calf
- wechat:DYD
参与贡献
我们非常欢迎您的贡献!如果您有任何想法或建议:
- Fork 本仓库
- 创建您的特性分支
- 提交您的更改
- 推送到分支
- 打开一个 Pull Request
您也可以通过以下方式参与:
- 提交 Bug 报告
- 提出新功能建议
- 改进文档
- 分享使用经验
每一份贡献都将受到重视和感谢!
许可证
本项目采用 MIT License。
使用、修改或分发时,请保留版权与许可声明,并注明出处。正式条款以根目录 LICENSE 为准。
评论