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