Dicom C-move 請求QR服務


個人理解 Dicom C-get 就是在沒有設置任何驗證情況下請求QR服務,而C-move是有驗證的情況下請求QR服務。一般都是C-move,因為機器都需要驗證。

Dicom C-move 原理:自己寫一個SCU程序,通過scu發送請求給QR服務,再用自己的SCP來接收QR的C-Store回傳的影像。

需要引用Dicom.Core 4.0.8.0或以下

 

  /// <summary>
        /// C-Store SCP AE Title:影像歸檔目的地的 AE Title,之所以這樣寫,是因為 C-Move 既可以是兩方通信,也可以是三方通信,如果是兩方通信,那么 C-Move SCU 同時需要提供 C-Store SCP 的功
        /// 能,這里就可以寫 C-Move SCU 的 AE Title;如果是三方通信,那么這個影像歸檔的目的地之需要提供 C-Store SCP 的功能,所以這里的參數就要寫C-Store SCP 的 AE Title;
        /// StudyInstanceUID:檢查唯一標識;
        /// C-Move SCP IP:C-Move 服務端的 IP 地址或機器名;
        /// C-Move SCP Port:C-Move 服務端的端口;
        /// C-Move SCU AE Title:C-Move 客戶端應用實體的名稱;
        /// C-Move SCP AE Title:C-Move 服務端應用實體的名稱;
        /// </summary>
        [Obsolete]
        private void C_Move(string studyInstanceUID)
        {
            try
            {

                SQLDBHelper helper = new SQLDBHelper();

                var model = helper.GetByStudyID(studyInstanceUID);
                if (model != null && model.ID > 0)
                    return;

                var successNum = new List<int>();
                var client = new DicomClient();
                //var request = new DicomCMoveRequest({ C - Store SCP AE Title }, { StudyInstanceUID});

                var destinationAe = ConfigurationManager.AppSettings["DestinationAe"];
                string host = ConfigurationManager.AppSettings["DicomHost"];
                int port = int.Parse(ConfigurationManager.AppSettings["DicomPort"]);
                bool useTls = bool.Parse(ConfigurationManager.AppSettings["DicomUseTls"]);
                string callingAe = ConfigurationManager.AppSettings["DicomcallingAe"];
                string calledAe = ConfigurationManager.AppSettings["DicomcalledAe"];

                var request = new DicomCMoveRequest(destinationAe, studyInstanceUID);
                client.AddRequest(request);

                request.OnResponseReceived += (DicomCMoveRequest requ, DicomCMoveResponse response) =>
                {
                    if (response.Status.State == DicomState.Pending)
                    {
                        successNum.Add(response.Remaining);
                        //Console.WriteLine("Sending is in progress. please wait: " + response.Remaining + " SOP instances need to do C-Store options");
                    }
                    else if (response.Status.State == DicomState.Success)
                    {
                        if (successNum != null && successNum.Count > 0)
                        {
                            var maxNum = successNum.Max();

                            helper.Insert(studyInstanceUID, maxNum + 1);
                        }

                        //Console.WriteLine("Sending successfully finished");
                    }
                    else if (response.Status.State == DicomState.Failure)
                    {
                        //Console.WriteLine("Error sending datasets: " + response.Status.Description);
                    }
                    //Console.WriteLine(response.Status);
                };

                //client.Send({ C - Move SCP IP}, { C - Move SCP Port}, false, { C - Move SCU AE Title}, { C - Move SCP AE Title});

                client.Send(host, port, useTls, callingAe, calledAe);

            }
            catch (Exception ex)
            {
                Logger.Instance().Error("用C-MOVE獲取圖像失敗:" + ex.Message + "    ,具體錯誤如下" + ex);
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM