Dicom 学习笔记-DICOM C-Store 消息服务

简介:

引言


  之前总体介绍了 DICOM 的消息服务,可以参考这篇博文,但是有关每个服务的详细信息没有讲解,本文就结合开源 DICOM 库 fo-dicom 详细介绍一下 C-Store 服务。

名词简介


  在正式讲解前我们还需要弄明白以下几个名词

  • SCU:Service Class User,可以理解为客户端(用户端);
  • SCP:Service Class Provider。可以理解为服务端;

C-Store 消息服务


  前文已经说明了 C-Store 服务用于一个 DIMSE-service-user 在同等的 DIMSE-service-user 上存储一个复合 SOP 实例,其实主要就是用来归档影像,在实际场景中,医院的设备(DR【普放】、CT【断层扫描】、MR【核磁】)做完检查后会产生影像文件(复合 SOP 实例),然后设备会通过 C-Store 服务将这些影像文件归档到 PACS 系统中。在这个过程中设备就相当于客户端,需要实现 C-Store SCU,PACS 系统相当于服务端,需要实现 C-Store SCP。
  C-Store 流程如下:

C-Store 流程

C-Store SCU


  结合开源库 fo-dicom 我们可以很轻松的实现 C-Store SCU,fo-dicom 已经封装好了 C-Store Request,具体代码可以在 GitHub 上查看 DicomCStoreRequest.cs,我们只需要如下的代码就可以实现 C-Store SCU:
这里需要引用命名空间【Dicom.Network】

using Dicom.Network;
var client = new DicomClient();
client.NegotiateAsyncOps();
var request = new DicomCStoreRequest({DICOM file path});

request.OnResponseReceived += (req, response) =>
{
    Console.WriteLine("C-Store Response Received, Status: " + response.Status);
};

client.AddRequest(request);
client.Send({C-Store SCP IP}, {C-Store SCP Port}, false, {C-Store SCU AE Title}, {C-Store SCP AE Title});
  • DICOM file path 指待归档的 DICOM 文件路径;
  • C-Store SCP IP 指 C-Store 服务端的 IP 地址或机器名;
  • C-Store SCP Port 指 C-Store 服务端的端口;
  • C-Store SCU AE Title 指 C-Store 客户端应用实体的名称;
  • C-Store SCP AE Title 指 C-Store 服务端应用实体的名称;
      基于以上代码就实现了一个简单的 C-Store 客户端,可用于归档单张影像,涉及到多张影像归档可在外层增加循环实现。

C-Store SCP


  C-Store SCP 可以通过派生 DicomService 服务类来实现 Dicom 服务的基本框架,然后实现 IDicomServiceProvider 和 IDicomCStoreProvider 接口来实现。具体代码可以参考这里
  最后我们将 C-Store SCP 的代码运行起来,然后使用上面 C-Store SCU 的代码来归档一张影像,然后我们会在 C-Store SCU 收到如下成功的消息【C-Store Response Received, Status: Success】,同时在 C-Store SCP 工程的【bin】目录下能找到一个【DICOM】文件夹,文件夹里面就是刚刚测试归档的影像。

Demo

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 数据采集 弹性计算
serverless 入门与实践46 | 学习笔记: 消息服务 + Serverless 函数计算如何助力企业降本提效?
serverless 入门与实践46 | 学习笔记: 消息服务 + Serverless 函数计算如何助力企业降本提效?
200 3
|
搜索推荐 开发者
消息服务-短信产品基本概念 | 学习笔记
快速学习消息服务-短信产品基本概念
消息服务-短信产品基本概念 | 学习笔记
|
开发工具 开发者
消息服务-创建短信签名 | 学习笔记
快速学习消息服务-创建短信签名
消息服务-创建短信签名 | 学习笔记
|
开发工具 开发者
消息服务-事件通知使用 | 学习笔记
快速学习消息服务-事件通知使用
消息服务-事件通知使用 | 学习笔记
|
开发者
消息服务-短信产品规则和业务限制 | 学习笔记
快速学习消息服务-短信产品规则和业务限制
|
7月前
|
XML 数据格式 C++
AMF/GLTF格式在线转换
3D模型在线转换是一个可以进行3D模型格式转换的在线工具,支持多种3D模型格式进行在线预览和互相转换。
106 0
AMF/GLTF格式在线转换
|
C++ Python
VS+VTK+Dicom(dcm)+CT影像切片窗体界面显示源码
VS+VTK+Dicom(dcm)+CT影像切片窗体界面显示源码
296 0
|
测试技术 Linux API
mutagen-处理音频元数据的Python模块
Mutagen是处理音频元数据的Python模块。它支持ASF,FLAC,MP4,Monkey's Audio,MP3,Musepack,Ogg Opus,Ogg FLAC,Ogg Speex,Ogg Theora,Ogg Vorbis,True Audio,WavPack,OptimFROG和AIFF音频文件。支持所有版本的ID3v2,并解析所有标准的ID3v2.4帧。它可以读取Xing标头,以准确计算MP3的比特率和长度。无论音频格式如何,都可以编辑ID3和APEv2标签。它还可以在单个数据包/页面级别上处理Ogg流。
2407 0
mutagen-处理音频元数据的Python模块
|
4月前
|
存储 API 网络架构
【Azure 媒体服务】Azure Media Service上传的视频资产,如何保证在Transfer编码后音频文件和视频文件不分成两个文件?保持在一个可以直接播放的MP4文件中呢?
【Azure 媒体服务】Azure Media Service上传的视频资产,如何保证在Transfer编码后音频文件和视频文件不分成两个文件?保持在一个可以直接播放的MP4文件中呢?

热门文章

最新文章