public IEnumerable <DicomCFindResponse> OnCFindRequest(DicomCFindRequest request) { string prefix = "[WorklistSCP] [" + session + "] "; Program.Log.Write(prefix + "Begin processing c-find request."); List <DicomCFindResponse> responses = new List <DicomCFindResponse>(); if (request.Level == DicomQueryRetrieveLevel.Worklist || request.Level == DicomQueryRetrieveLevel.Patient) { DataSet dsQC = DicomMappingHelper.CreateQCDataSet <MWLQueryCriteriaItem>(WorkListSCPService.Service.QCList, request.Dataset); WorklistSCPHelper.ModifyQCDataSet(WorkListSCPService.Service.QCList, dsQC); if (dsQC == null) { Program.Log.Write(prefix + "[WARNING] Process query criteria failed."); responses.Add(new DicomCFindResponse(request, DicomStatus.QueryRetrieveUnableToProcess)); return(responses); } DataSet dsQR = WorkListSCPService.Service.RequestData(Program.ConfigMgt.Config.Rule, dsQC); if (dsQR == null) { Program.Log.Write(prefix + "[WARNING] Query GC Gateway database failed."); responses.Add(new DicomCFindResponse(request, DicomStatus.QueryRetrieveUnableToProcess)); return(responses); } WorklistSCPHelper.GenerateRequestedProcedureID(dsQR, session); if (WorklistSCPHelper.SplitDataRow(dsQR)) { Program.Log.Write(prefix + "[INFORMATION] Found multiple values in code value and performed splitting."); } //fname = path + "\\DataSet_QR_2_SPLIT_" + DateTime.Now.Ticks.ToString() + ".xml"; //dsQR.WriteXml(fname); DElementListWrapper[] resultList = null; if (Program.ConfigMgt.Config.MergeElementList) { resultList = WorklistSCPHelper.CreateQRElementList <MWLQueryResultItem>(WorkListSCPService.Service.QRList, dsQR); } else { resultList = DicomMappingHelper.CreateQRElementList <MWLQueryResultItem>(WorkListSCPService.Service.QRList, dsQR); } if (resultList == null) { Program.Log.Write(prefix + "[WARNING] Process query result failed."); responses.Add(new DicomCFindResponse(request, DicomStatus.QueryRetrieveUnableToProcess)); return(responses); } int count = resultList.Length; if (count < 1) { Program.Log.Write(prefix + "[WARNING] No query result."); } else { int index = 1; foreach (DElementListWrapper eleList in resultList) { Program.Log.Write(prefix + "Sending query result " + (index++).ToString() + "/" + count.ToString()); DicomDataset result = new DicomDataset(); if (Program.ConfigMgt.Config.SendCharacterSetTag) { //eleList.List.Add(DHelper.CharacterSet); if (DHelper.iCharacterSet != null) { for (int i = 0; i < DHelper.iCharacterSet.Length; i++) { eleList.List.Add <string>(DicomTag.SpecificCharacterSet, DHelper.iCharacterSet[i]); } } } eleList.List.Add <string>(new DicomTag(0x0000, 0x0002), "1.2.840.10008.5.1.4.31"); DicomCFindResponse response = new DicomCFindResponse(request, DicomStatus.Pending); response.Dataset = eleList.List; responses.Add(response); } } } responses.Add(new DicomCFindResponse(request, DicomStatus.Success)); return(responses); }