引言
??之前總體介紹了 DICOM 的消息服務(wù)货裹,可以參考這篇博文露泊,但是有關(guān)每個服務(wù)的詳細(xì)信息沒有講解,本文就結(jié)合開源 DICOM 庫 fo-dicom 詳細(xì)介紹一下 C-Store 服務(wù)。
名詞簡介
??在正式講解前我們還需要弄明白以下幾個名詞
- SCU:Service Class User历造,可以理解為客戶端(用戶端);
- SCP:Service Class Provider垫蛆∥バⅲ可以理解為服務(wù)端;
C-Store 消息服務(wù)
??前文已經(jīng)說明了 C-Store 服務(wù)用于一個 DIMSE-service-user 在同等的 DIMSE-service-user 上存儲一個復(fù)合 SOP 實(shí)例集索,其實(shí)主要就是用來歸檔影像屿愚,在實(shí)際場景中汇跨,醫(yī)院的設(shè)備(DR【普放】、CT【斷層掃描】妆距、MR【核磁】)做完檢查后會產(chǎn)生影像文件(復(fù)合 SOP 實(shí)例)穷遂,然后設(shè)備會通過 C-Store 服務(wù)將這些影像文件歸檔到 PACS 系統(tǒng)中。在這個過程中設(shè)備就相當(dāng)于客戶端娱据,需要實(shí)現(xiàn) C-Store SCU蚪黑,PACS 系統(tǒng)相當(dāng)于服務(wù)端,需要實(shí)現(xiàn) C-Store SCP吸耿。
??C-Store 流程如下:
C-Store SCU
??結(jié)合開源庫 fo-dicom 我們可以很輕松的實(shí)現(xiàn) C-Store SCU祠锣,fo-dicom 已經(jīng)封裝好了 C-Store Request,具體代碼可以在 GitHub 上查看 DicomCStoreRequest.cs咽安,我們只需要如下的代碼就可以實(shí)現(xiàn) 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 服務(wù)端的 IP 地址或機(jī)器名;
- C-Store SCP Port 指 C-Store 服務(wù)端的端口妆棒;
- C-Store SCU AE Title 指 C-Store 客戶端應(yīng)用實(shí)體的名稱澡腾;
- C-Store SCP AE Title 指 C-Store 服務(wù)端應(yīng)用實(shí)體的名稱;
??基于以上代碼就實(shí)現(xiàn)了一個簡單的 C-Store 客戶端糕珊,可用于歸檔單張影像动分,涉及到多張影像歸檔可在外層增加循環(huán)實(shí)現(xiàn)。
C-Store SCP
??C-Store SCP 可以通過派生 DicomService 服務(wù)類來實(shí)現(xiàn) Dicom 服務(wù)的基本框架红选,然后實(shí)現(xiàn) IDicomServiceProvider 和 IDicomCStoreProvider 接口來實(shí)現(xiàn)澜公。具體代碼可以參考這里。
??最后我們將 C-Store SCP 的代碼運(yùn)行起來喇肋,然后使用上面 C-Store SCU 的代碼來歸檔一張影像坟乾,然后我們會在 C-Store SCU 收到如下成功的消息【C-Store Response Received, Status: Success】,同時在 C-Store SCP 工程的【bin】目錄下能找到一個【DICOM】文件夾蝶防,文件夾里面就是剛剛測試歸檔的影像甚侣。