Пример #1
0
        private DicomNCreateResponse CreateFilmSession(DicomNCreateRequest request)
        {
            if (_filmSession != null)
            {
                this.Logger.Error("Attemted to create new basic film session on association with {0}", CallingAE);
                SendAbort(DicomAbortSource.ServiceProvider, DicomAbortReason.NotSpecified);
                return(new DicomNCreateResponse(request, DicomStatus.NoSuchObjectInstance));
            }

            var pc = request.PresentationContext;

            bool isColor = pc != null && pc.AbstractSyntax == DicomUID.BasicColorPrintManagementMetaSOPClass;


            _filmSession = new FilmSession(request.SOPClassUID, request.SOPInstanceUID, request.Dataset, isColor);


            this.Logger.Info("Create new film session {0}", _filmSession.SOPInstanceUID.UID);
            if (request.SOPInstanceUID == null || request.SOPInstanceUID.UID == string.Empty)
            {
                request.Command.AddOrUpdate(DicomTag.AffectedSOPInstanceUID, _filmSession.SOPInstanceUID);
            }
            var response = new DicomNCreateResponse(request, DicomStatus.Success);

            return(response);
        }
Пример #2
0
        private DicomNCreateResponse CreateFilmBox(DicomNCreateRequest request)
        {
            if (_filmSession == null)
            {
                this.Logger.Error("A basic film session does not exist for this association {0}", CallingAE);
                SendAbort(DicomAbortSource.ServiceProvider, DicomAbortReason.NotSpecified);
                return(new DicomNCreateResponse(request, DicomStatus.NoSuchObjectInstance));
            }


            var filmBox = _filmSession.CreateFilmBox(request.SOPInstanceUID, request.Dataset);

            if (!filmBox.Initialize())
            {
                this.Logger.Error("Failed to initialize requested film box {0}", filmBox.SOPInstanceUID.UID);
                SendAbort(DicomAbortSource.ServiceProvider, DicomAbortReason.NotSpecified);
                return(new DicomNCreateResponse(request, DicomStatus.ProcessingFailure));
            }

            this.Logger.Info("Created new film box {0}", filmBox.SOPInstanceUID.UID);

            var response = new DicomNCreateResponse(request, DicomStatus.Success);

            response.Command.Add(DicomTag.AffectedSOPInstanceUID, filmBox.SOPInstanceUID);
            response.Dataset = filmBox;
            return(response);
        }
        public async Task AcceptStoreContexts()
        {
            int port = Ports.GetNext();

            using (DicomServerFactory.Create <AcceptOnlyEchoStoreProvider>(port))
            {
                var         echoReq    = new DicomCEchoRequest();
                DicomStatus echoStatus = DicomStatus.Pending;
                echoReq.OnResponseReceived += (req, resp) => echoStatus = resp.Status;

                var         storeReq    = new DicomCStoreRequest(TestData.Resolve("CT1_J2KI"));
                DicomStatus storeStatus = DicomStatus.Pending;
                storeReq.OnResponseReceived += (req, resp) => storeStatus = resp.Status;

                var         filmSession = new FilmSession(DicomUID.BasicFilmSession, DicomUID.Generate());
                var         printReq    = new DicomNCreateRequest(filmSession.SOPClassUID, filmSession.SOPInstanceUID);
                DicomStatus printStatus = DicomStatus.Pending;
                printReq.OnResponseReceived += (req, resp) => printStatus = resp.Status;

                var client = DicomClientFactory.Create("127.0.0.1", port, false, "SCU", "ANY-SCP");
                await client.AddRequestsAsync(new DicomRequest[] { echoReq, storeReq, printReq });

                await client.SendAsync();

                Assert.Equal(DicomStatus.Success, echoStatus);
                Assert.Equal(DicomStatus.Success, storeStatus);
                Assert.Equal(DicomStatus.SOPClassNotSupported, printStatus);
            }
        }
        public async Task OnNCreateRequestAsync_ShouldRespond()
        {
            var port = Ports.GetNext();

            using (DicomServerFactory.Create <AsyncDicomNServiceProvider>(port, logger: _logger.IncludePrefix("DicomServer")))
            {
                var client = DicomClientFactory.Create("127.0.0.1", port, false, "SCU", "ANY-SCP");
                client.Logger = _logger.IncludePrefix(typeof(DicomClient).Name);

                DicomNCreateResponse            response = null;
                DicomRequest.OnTimeoutEventArgs timeout  = null;
                var request = new DicomNCreateRequest(
                    DicomUID.BasicFilmSession,
                    new DicomUID("1.2.3", null, DicomUidType.SOPInstance))
                {
                    OnResponseReceived = (req, res) => response = res,
                    OnTimeout          = (sender, args) => timeout = args
                };

                await client.AddRequestAsync(request).ConfigureAwait(false);

                await client.SendAsync().ConfigureAwait(false);

                Assert.NotNull(response);
                Assert.Equal(DicomStatus.Success, response.Status);
                Assert.Null(timeout);
            }
        }
Пример #5
0
        public DicomNCreateResponse OnNCreateRequest(DicomNCreateRequest request)
        {
            UpdateMppsStatusInLocalCollections(request);

            var resp = new DicomNCreateResponse(request, DicomStatus.Success);

            return(resp);
        }
Пример #6
0
        public void Print()
        {
            var dicomClient = new DicomClient();

            dicomClient.NegotiateAsyncOps();

            dicomClient.AddRequest(
                new DicomNCreateRequest(FilmSession.SOPClassUID, FilmSession.SOPInstanceUID)
            {
                Dataset = FilmSession
            });


            foreach (var filmbox in FilmSession.BasicFilmBoxes)
            {
                var imageBoxRequests = new List <DicomNSetRequest>();

                var filmBoxRequest = new DicomNCreateRequest(FilmBox.SOPClassUID, filmbox.SOPInstanceUID)
                {
                    Dataset
                        =
                            filmbox
                };
                filmBoxRequest.OnResponseReceived = (request, response) =>
                {
                    if (response.HasDataset)
                    {
                        var seq = response.Dataset.Get <DicomSequence>(DicomTag.ReferencedImageBoxSequence);
                        for (int i = 0; i < seq.Items.Count; i++)
                        {
                            var req            = imageBoxRequests[i];
                            var imageBox       = req.Dataset;
                            var sopInstanceUid = seq.Items[i].Get <string>(DicomTag.ReferencedSOPInstanceUID);
                            imageBox.Add(DicomTag.SOPInstanceUID, sopInstanceUid);
                            req.Command.Add(DicomTag.RequestedSOPInstanceUID, sopInstanceUid);
                        }
                    }
                };
                dicomClient.AddRequest(filmBoxRequest);



                foreach (var image in filmbox.BasicImageBoxes)
                {
                    var req = new DicomNSetRequest(image.SOPClassUID, image.SOPInstanceUID)
                    {
                        Dataset = image
                    };

                    imageBoxRequests.Add(req);
                    dicomClient.AddRequest(req);
                }
            }

            dicomClient.AddRequest(new DicomNActionRequest(FilmSession.SOPClassUID, FilmSession.SOPInstanceUID, 0x0001));

            dicomClient.Send(RemoteAddress, RemotePort, false, CallingAE, CalledAE);
        }
Пример #7
0
        public void SOPInstanceUIDGetter_SOPInstanceUIDNotDefinedInConstruction_IsNotDefinedInRequest()
        {
            var command = new DicomDataset
            {
                { DicomTag.CommandField, (ushort)DicomCommandField.NCreateRequest },
                { DicomTag.MessageID, (ushort)1 },
                { DicomTag.AffectedSOPClassUID, "1.2.3" }
            };

            var request  = new DicomNCreateRequest(command);
            var expected = request.SOPInstanceUID;

            Assert.Null(expected);
        }
Пример #8
0
        private DicomNCreateResponse CreatePresentationLut(DicomNCreateRequest request)
        {
            if (_filmSession == null)
            {
                Logger.Error("Film Session on association with {0} does not exist", CallingAE);
                SendAbort(DicomAbortSource.ServiceProvider, DicomAbortReason.NotSpecified);
                return(new DicomNCreateResponse(request, DicomStatus.NoSuchObjectInstance));
            }

            _filmSession.CreatePresentationLut(request.SOPInstanceUID, request.Dataset);
            var response = new DicomNCreateResponse(request, DicomStatus.Success);

            response.Command.Add(DicomTag.AffectedSOPInstanceUID, _filmSession.SOPInstanceUID);
            return(response);
        }
Пример #9
0
        public void Constructor_FromRequestWithoutSopInstanceUid_ShouldNotThrow()
        {
            var request =
                new DicomNCreateRequest(new DicomDataset
            {
                { DicomTag.CommandField, (ushort)DicomCommandField.NCreateRequest },
                { DicomTag.MessageID, (ushort)1 },
                { DicomTag.AffectedSOPClassUID, "1.2.3" }
            });

            DicomNCreateResponse response = null;
            var exception = Record.Exception(() => response = new DicomNCreateResponse(request, DicomStatus.Success));

            Assert.Null(exception);
            Assert.Null(response.SOPInstanceUID);
        }
Пример #10
0
 public DicomNCreateResponse OnNCreateRequest(DicomNCreateRequest request)
 {
     lock (_synchRoot)
     {
         if (request.SOPClassUID == DicomUID.BasicFilmSessionSOPClass)
         {
             return(CreateFilmSession(request));
         }
         else if (request.SOPClassUID == DicomUID.BasicFilmBoxSOPClass)
         {
             return(CreateFilmBox(request));
         }
         else
         {
             return(new DicomNCreateResponse(request, DicomStatus.SOPClassNotSupported));
         }
     }
 }
Пример #11
0
 public Task <DicomNCreateResponse> OnNCreateRequestAsync(DicomNCreateRequest request)
 {
     lock (_synchRoot)
     {
         if (request.SOPClassUID == DicomUID.BasicFilmSession)
         {
             return(Task.FromResult(CreateFilmSession(request)));
         }
         else if (request.SOPClassUID == DicomUID.BasicFilmBox)
         {
             return(Task.FromResult(CreateFilmBox(request)));
         }
         else
         {
             return(Task.FromResult(new DicomNCreateResponse(request, DicomStatus.SOPClassNotSupported)));
         }
     }
 }
Пример #12
0
        public DicomNCreateResponse OnNCreateRequest(DicomNCreateRequest request)
        {
            if (request.SOPClassUID != DicomUID.ModalityPerformedProcedureStepSOPClass)
            {
                return(new DicomNCreateResponse(request, DicomStatus.SOPClassNotSupported));
            }
            // on N-Create the UID is stored in AffectedSopInstanceUID, in N-Set the UID is stored in RequestedSopInstanceUID
            var affectedSopInstanceUID = request.Command.GetSingleValue <string>(DicomTag.AffectedSOPInstanceUID);

            Logger.Info($"recieving N-Create with SopUID {affectedSopInstanceUID}");
            // get the procedureStepIds from request
            var procedureStepId = request.Dataset.GetSequence(DicomTag.ScheduledStepAttributesSequence)
                                  .First()
                                  .GetSingleValue <string>(DicomTag.ScheduledProcedureStepID);
            bool ok = MppsSource.SetInProgress(affectedSopInstanceUID, procedureStepId);

            return(new DicomNCreateResponse(request, ok ? DicomStatus.Success : DicomStatus.ProcessingFailure));
        }
Пример #13
0
 /// <summary>
 /// Initizalizes a new instance of the <see cref="DicomNCreateResponse"/> class.
 /// </summary>
 /// <param name="request">Associated N-CREATE request.</param>
 /// <param name="status">Response status.</param>
 public DicomNCreateResponse(DicomNCreateRequest request, DicomStatus status)
     : base(request, status)
 {
     SOPInstanceUID = request.SOPInstanceUID;
 }
Пример #14
0
        private static (DicomUID affectedInstanceUid, string responseStatus, string responseMessage) SendMppsInProgress(string serverIP, int serverPort, string serverAET, string clientAET, DicomDataset worklistItem)
        {
            var client  = new DicomClient();
            var dataset = new DicomDataset();

            DicomSequence procedureStepSq = worklistItem.GetSequence(DicomTag.ScheduledProcedureStepSequence);
            // A worklistitem may have a list of scheduledprocedureSteps.
            // For each of them you have to send separate MPPS InProgress- and Completed-messages.
            // there in this example we will only send for the first procedure step
            var procedureStep = procedureStepSq.First();

            DicomDataset content = new DicomDataset();
            // get study instance UID from MWL query resault
            string studyInstanceUID = worklistItem.GetSingleValueOrDefault(DicomTag.StudyInstanceUID, DicomUID.Generate().ToString());

            // set Attribute Sequence data
            content.Add(DicomTag.StudyInstanceUID, studyInstanceUID);
            content.Add(DicomTag.ReferencedStudySequence, new DicomDataset());
            content.Add(DicomTag.AccessionNumber, worklistItem.GetSingleValueOrDefault(DicomTag.AccessionNumber, String.Empty));
            content.Add(DicomTag.RequestedProcedureID, worklistItem.GetSingleValueOrDefault(DicomTag.RequestedProcedureID, String.Empty));
            content.Add(DicomTag.RequestedProcedureDescription, worklistItem.GetSingleValueOrDefault(DicomTag.RequestedProcedureDescription, String.Empty));
            content.Add(DicomTag.ScheduledProcedureStepID, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepID, String.Empty));
            content.Add(DicomTag.ScheduledProcedureStepDescription, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepDescription, String.Empty));
            content.Add(DicomTag.ScheduledProtocolCodeSequence, new DicomDataset());

            DicomSequence attr_Sequence = new DicomSequence(DicomTag.ScheduledStepAttributesSequence, content);//"Scheduled Step Attribute Sequence"

            dataset.Add(attr_Sequence);

            dataset.Add(DicomTag.PatientName, worklistItem.GetSingleValueOrDefault(DicomTag.PatientName, String.Empty));
            dataset.Add(DicomTag.PatientID, worklistItem.GetSingleValueOrDefault(DicomTag.PatientID, String.Empty));
            dataset.Add(DicomTag.PatientBirthDate, worklistItem.GetSingleValueOrDefault(DicomTag.PatientBirthDate, String.Empty));
            dataset.Add(DicomTag.PatientSex, worklistItem.GetSingleValueOrDefault(DicomTag.PatientSex, String.Empty));

            dataset.Add(DicomTag.ReferencedPatientSequence, new DicomDataset());
            dataset.Add(DicomTag.PerformedProcedureStepID, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepID, String.Empty));
            dataset.Add(DicomTag.PerformedStationAETitle, PerformedStationAETitle);
            dataset.Add(DicomTag.PerformedStationName, PerformedStationName);
            dataset.Add(DicomTag.PerformedLocation, string.Empty);
            dataset.Add(DicomTag.PerformedProcedureStepStartDate, DateTime.Now);
            dataset.Add(DicomTag.PerformedProcedureStepStartTime, DateTime.Now);
            // set status
            dataset.Add(DicomTag.PerformedProcedureStepStatus, "IN PROGRESS");
            dataset.Add(DicomTag.PerformedProcedureStepDescription, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepID, String.Empty));
            dataset.Add(DicomTag.PerformedProcedureTypeDescription, string.Empty);

            dataset.Add(DicomTag.PerformedProcedureStepEndDate, string.Empty);
            dataset.Add(DicomTag.PerformedProcedureStepEndTime, string.Empty);
            // get modality from MWL query resault
            dataset.Add(DicomTag.Modality, procedureStep.GetSingleValueOrDefault(DicomTag.Modality, String.Empty));
            dataset.Add(DicomTag.StudyID, worklistItem.GetSingleValueOrDefault(DicomTag.StudyID, string.Empty));
            dataset.Add(DicomTag.PerformedProtocolCodeSequence, new DicomDataset());

            // create an unique UID as the effectedinstamceUid, this id will be needed for the N-SET also
            DicomUID effectedinstamceUid = DicomUID.Generate("effectedinstamceUid");
            var      dicomStartRequest   = new DicomNCreateRequest(DicomUID.ModalityPerformedProcedureStepSOPClass, effectedinstamceUid)
            {
                Dataset = dataset
            };

            string responseStatus  = string.Empty;
            string responseMessage = string.Empty;

            dicomStartRequest.OnResponseReceived += (req, response) =>
            {
                if (response != null)
                {
                    Console.WriteLine(response);
                    responseStatus  = response.Status.ToString();
                    responseMessage = response.ToString();
                }
            };

            client.AddRequest(dicomStartRequest);
            client.SendAsync(serverIP, serverPort, false, clientAET, serverAET).Wait();

            return(effectedinstamceUid, responseStatus, responseMessage);
        }
Пример #15
0
 public DicomNCreateResponse(DicomNCreateRequest request, DicomStatus status)
     : base(request, status)
 {
 }
Пример #16
0
 public DicomNCreateResponse(DicomNCreateRequest request, DicomStatus status)
     : base(request, status)
 {
 }
Пример #17
0
 public DicomNCreateResponse OnNCreateRequest(DicomNCreateRequest request)
 {
     throw new NotImplementedException();
 }
Пример #18
0
        public static string SendPrintTask(string callingAE, string calledAE, string calledIP, int calledPort, string taskPath)
        {
            PrintTaskInfo task = new PrintTaskInfo()
            {
                CallingAETitle = callingAE, TaskPath = taskPath
            };

            string strErr = string.Empty;

            LogManager.Instance.Log("Start to send print task: " + taskPath);
            try
            {
                DirectoryInfo dirTask = new DirectoryInfo(taskPath);
                if (!dirTask.Exists)
                {
                    throw new Exception("invalid task path");
                }

                string filmSessionFile = Path.Combine(taskPath, "FilmSession.dcm");
                if (!File.Exists(filmSessionFile))
                {
                    throw new Exception("can't find film session file");
                }

                //load filmSession from dcmFile
                FilmSession filmSession = FilmSession.Load(filmSessionFile);

                //load filmBox from dcmFiles
                var subDirs = dirTask.EnumerateDirectories();
                foreach (DirectoryInfo dirFilmBox in subDirs)
                {
                    FilmBox filmBox = FilmBox.Load(filmSession, dirFilmBox.FullName);
                    filmSession.BasicFilmBoxes.Add(filmBox);
                }

                var dicomClient = new DicomClient();

                var filmSessionRequest = new DicomNCreateRequest(filmSession.SOPClassUID, filmSession.SOPInstanceUID);
                filmSessionRequest.Dataset = filmSession;

                dicomClient.AddRequest(filmSessionRequest);

                foreach (var filmbox in filmSession.BasicFilmBoxes)
                {
                    var imageBoxRequests = new List <DicomNSetRequest>();

                    var filmBoxRequest = new DicomNCreateRequest(FilmBox.SOPClassUID, filmbox.SOPInstanceUID);
                    filmBoxRequest.Dataset = filmbox;

                    filmBoxRequest.OnResponseReceived = (request, response) =>
                    {
                        if (response.HasDataset)
                        {
                            var seq = response.Dataset.Get <DicomSequence>(DicomTag.ReferencedImageBoxSequence);
                            for (int i = 0; i < seq.Items.Count; i++)
                            {
                                var req            = imageBoxRequests[i];
                                var imageBox       = req.Dataset;
                                var sopInstanceUid = seq.Items[i].Get <string>(DicomTag.ReferencedSOPInstanceUID);
                                imageBox.AddOrUpdate(DicomTag.SOPInstanceUID, sopInstanceUid);
                                req.Command.AddOrUpdate(DicomTag.RequestedSOPInstanceUID, sopInstanceUid);
                            }
                        }
                    };
                    dicomClient.AddRequest(filmBoxRequest);

                    foreach (var image in filmbox.BasicImageBoxes)
                    {
                        var req = new DicomNSetRequest(image.SOPClassUID, image.SOPInstanceUID)
                        {
                            Dataset = image
                        };

                        imageBoxRequests.Add(req);
                        dicomClient.AddRequest(req);
                    }
                }

                dicomClient.AddRequest(new DicomNActionRequest(filmSession.SOPClassUID, filmSession.SOPInstanceUID, 0x0001));

                dicomClient.Send(calledIP, calledPort, false, callingAE, calledAE);

                task.HasError = false;
                if (PrintTaskEvent != null)
                {
                    PrintTaskEvent(task);
                }
            }
            catch (Exception e)
            {
                strErr = e.Message;
                LogManager.Instance.Log("Send task failed due to " + e.Message);

                task.HasError     = true;
                task.ErrorMessage = e.Message;
                if (PrintTaskEvent != null)
                {
                    PrintTaskEvent(task);
                }
            }

            return(strErr);
        }
 public Task <DicomNCreateResponse> OnNCreateRequestAsync(DicomNCreateRequest request)
 => Task.FromResult(new DicomNCreateResponse(request, DicomStatus.Success)
 {
     Dataset = request.Dataset
 });
Пример #20
0
        public async Task <(DicomUID affectedInstanceUid, string studyInstanceUid, bool result)> SendMppsInProgressAsync(string serverIp, int serverPort, string serverAET, string localAET, DicomDataset worklistItem)
        {
            DicomSequence procedureStepSeq = worklistItem.GetSequence(DicomTag.ScheduledProcedureStepSequence);
            // A worklistitem may have a list of scheduledprocedureSteps.
            // For each of them you have to send separate MPPS InProgress- and Completed-messages.
            // there in this example we will only send for the first procedure step
            DicomDataset procedureStep = procedureStepSeq.First();

            // get study instance UID from MWL query resault
            string studyInstanceUID = worklistItem.GetSingleValueOrDefault(DicomTag.StudyInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID().UID);

            DicomDataset dataset = new DicomDataset
            {
                { DicomTag.PatientName, worklistItem.GetSingleValueOrDefault(DicomTag.PatientName, string.Empty) },
                { DicomTag.PatientID, worklistItem.GetSingleValueOrDefault(DicomTag.PatientID, string.Empty) },
                { DicomTag.PatientBirthDate, worklistItem.GetSingleValueOrDefault(DicomTag.PatientBirthDate, string.Empty) },
                { DicomTag.PatientSex, worklistItem.GetSingleValueOrDefault(DicomTag.PatientSex, string.Empty) },
                { DicomTag.StudyID, worklistItem.GetSingleValueOrDefault(DicomTag.StudyID, string.Empty) },
                { DicomTag.StudyInstanceUID, studyInstanceUID },

                { DicomTag.PerformedProcedureStepID, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepID, string.Empty) },
                { DicomTag.PerformedProcedureStepDescription, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepID, string.Empty) },

                // set status
                { DicomTag.PerformedProcedureStepStatus, IN_PROGRESS },
                { DicomTag.PerformedProcedureTypeDescription, string.Empty },

                { DicomTag.PerformedProcedureStepStartDate, DateTime.Now },
                { DicomTag.PerformedProcedureStepStartTime, DateTime.Now },
                { DicomTag.PerformedProcedureStepEndDate, string.Empty },
                { DicomTag.PerformedProcedureStepEndTime, string.Empty },
                { DicomTag.PerformedLocation, string.Empty },
                { DicomTag.PerformedStationAETitle, localAET },
                { DicomTag.PerformedStationName, localAET },
                // get modality from MWL query result
                { DicomTag.Modality, procedureStep.GetSingleValueOrDefault(DicomTag.Modality, string.Empty) },
                { DicomTag.PerformedProtocolCodeSequence, new DicomDataset() },
                { DicomTag.ProcedureCodeSequence, new DicomDataset() },
                { DicomTag.ReferencedPatientSequence, new DicomDataset() }
            };
            // set Attribute Sequence data
            DicomDataset content = new DicomDataset
            {
                { DicomTag.AccessionNumber, worklistItem.GetSingleValueOrDefault(DicomTag.AccessionNumber, string.Empty) },
                { DicomTag.StudyInstanceUID, studyInstanceUID },
                { DicomTag.ReferencedStudySequence, new DicomDataset() },
                { DicomTag.RequestedProcedureID, worklistItem.GetSingleValueOrDefault(DicomTag.RequestedProcedureID, string.Empty) },
                { DicomTag.RequestedProcedureDescription, worklistItem.GetSingleValueOrDefault(DicomTag.RequestedProcedureDescription, string.Empty) },
                { DicomTag.ScheduledProcedureStepID, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepID, string.Empty) },
                { DicomTag.ScheduledProcedureStepDescription, procedureStep.GetSingleValueOrDefault(DicomTag.ScheduledProcedureStepDescription, string.Empty) },
                { DicomTag.ScheduledProtocolCodeSequence, new DicomDataset() }
            };

            DicomSequence attr_Sequence = new DicomSequence(DicomTag.ScheduledStepAttributesSequence, content);//"Scheduled Step Attribute Sequence"

            dataset.Add(attr_Sequence);

            dataset.Add(DicomTag.PerformedSeriesSequence, new DicomDataset());

            // create an unique UID as the effectedinstamceUid, this id will be needed for the N-SET also
            DicomUID effectedinstamceUid = DicomUID.Generate();

            DicomNCreateRequest dicomStartRequest = new DicomNCreateRequest(DicomUID.ModalityPerformedProcedureStepSOPClass, effectedinstamceUid)
            {
                Dataset = dataset
            };

            bool result = false;

            dicomStartRequest.OnResponseReceived += (req, res) =>
            {
                if (res != null)
                {
                    if (res.Status == DicomStatus.Success)
                    {
                        Logger.Debug("Set study [{0}] [In Progress] Success.", studyInstanceUID);

                        result = true;
                    }
                    else
                    {
                        Logger.Warn("Set study [{0}] [In Progress] Failed. [{1}]", studyInstanceUID, res.Status);
                    }
                }
            };

            DicomClient client = new DicomClient(serverIp, serverPort, false, localAET, serverAET);
            await client.AddRequestAsync(dicomStartRequest);

            await client.SendAsync();

            return(effectedinstamceUid, studyInstanceUID, result);
        }
Пример #21
0
 public Task <DicomNCreateResponse> OnNCreateRequestAsync(DicomNCreateRequest request) => throw new NotImplementedException();