CFind在研究级别上失败-不支持SOP类或找不到抽象语法的可接受的表示上下文

Han*_*ans 7 c# dicom fo-dicom

该应用程序尝试在患者级别进行CFind,获取研究,进行研究,获取系列,最后得到图像。

该代码在查询两个不同的PACS实现时有效,但在研究级别的第三个失败。

发出患者请求的代码部分

var request = DicomCFindRequest.CreatePatientQuery(patientId: _patientid, patientName: _patientname);

var client = new DicomClient();
client.AddRequest(request);
await client.SendAsync(destip, port, useTLS, callingAE, calledAE);
Run Code Online (Sandbox Code Playgroud)

对于学习水平

request = DicomCFindRequest.CreateStudyQuery(patientId: _patientid);
Run Code Online (Sandbox Code Playgroud)

通过检查日志并比较工具中的日志,似乎应该有一个抽象语法列表,而不仅仅是一个?还是什么问题?

var request = DicomCFindRequest.CreatePatientQuery(patientId: _patientid, patientName: _patientname);

var client = new DicomClient();
client.AddRequest(request);
await client.SendAsync(destip, port, useTLS, callingAE, calledAE);
Run Code Online (Sandbox Code Playgroud)

来自jdicom的日志,该日志可以在学习级别执行cfind请求

request = DicomCFindRequest.CreateStudyQuery(patientId: _patientid);
Run Code Online (Sandbox Code Playgroud)

编辑,
这是一致性声明。 https://sectramedical.blob.core.windows.net/uploads/2018/04/pacs-dicom-conformance-statement-20.1.pdf

但是,如果不支持CFind,将使用哪种方法检索研究和序列?我在这里迷路了,但我非常感谢您抽出宝贵的时间来提示。

这是其他工具的日志(由于帖子的最大长度而被截断了),该工具设法列出了患者和研究内容,并且一些屏幕截图显示了可能的结果。Radiant还提供了一个屏幕截图,该屏幕截图也可以连接,显示患者并显示图像。

PatientRootLog

                            #  14      1  PatientID
(0020,000d) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476158]#  50      1  StudyInstanceUID
(0020,000e) UI []                                           #  0       0  SeriesInstanceUID
(0020,0011) IS []                                           #  0       0  SeriesNumber
(0020,1209) IS []                                           #  0       0  NumberOfSeriesRelatedImages
jdicom: DICOM_QR_SCP PDU received

jdicom: #16:DICOM_QR_SCP >> C-FIND-RSP Patient Root Query/Retrieve Information Model - FIND SOP Class, status #ff00H[StatusEntry.PENDING]

(0000,0002) UI [1.2.840.10008.5.1.4.1.2.1.1]                #  28      1  AffectedSOPClassUID
(0000,0100) US [32800]                                      #  2       1  CommandField
(0000,0120) US [1]                                          #  2       1  MessageIDBeingRespondedTo
(0000,0800) US [258]                                        #  2       1  DataSetType
(0000,0900) US [65280]                                      #  2       1  Status
jdicom: #16:DICOM_QR_SCP >> Dataset

(0008,0005) CS [ISO_IR 100]                                 #  10      1  SpecificCharacterSet
(0008,0050) SH [1912121-0034201]                           #  16      1  AccessionNumber
(0008,0052) CS [SERIES]                                     #  6       1  QueryRetrieveLevel
(0008,0054) AE [DICOM_QR_SCP]                               #  12      1  RetrieveAETitle
(0008,0060) CS [OP]                                         #  2       1  Modality
(0010,0020) LO [19121212-1212]                              #  14      1  PatientID
(0020,000d) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476158]#  50      1  StudyInstanceUID
(0020,000e) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476159]#  50      1  SeriesInstanceUID
(0020,0010) SH [1912121-0034201]                           #  16      1  StudyID
(0020,0011) IS [1]                                          #  2       1  SeriesNumber
(0020,1209) IS [1]                                          #  2       1  NumberOfSeriesRelatedImages
jdicom: DICOM_QR_SCP Waiting for PDU

jdicom: DICOM_QR_SCP PDU received

jdicom: #16:DICOM_QR_SCP >> C-FIND-RSP Patient Root Query/Retrieve Information Model - FIND SOP Class, status #0000H[Success]

(0000,0002) UI [1.2.840.10008.5.1.4.1.2.1.1]                #  28      1  AffectedSOPClassUID
(0000,0100) US [32800]                                      #  2       1  CommandField
(0000,0120) US [1]                                          #  2       1  MessageIDBeingRespondedTo
(0000,0800) US [257]                                        #  2       1  DataSetType
(0000,0900) US [0]                                          #  2       1  Status
jdicom: DICOM_QR_SCP Waiting for PDU

jdicom: Enter _dimseSCUs.waitUntilEmpty(

jdicom: Enter _as.sendReleaseRequest()

jdicom: #16:DICOM_QR_SCP << A-RELEASE-RQ PDU

jdicom: Leave DimseExchange.releaseAssoc()

jdicom: DICOM_QR_SCP PDU received

jdicom: #16:DICOM_QR_SCP >> A-RELEASE-RP PDU

jdicom: #16:DICOM_QR_SCP closing socket

jdicom: DICOM_QR_SCP Leave DimseExchange.run()

jdicom: #17:DICOM_QR_SCP << A-ASSOCIATE-RQ PDU

jdicom: *** request ***
application context UID: null
called title: DICOM_QR_SCP
calling title: jdicom
max pdu size: 32768
max operation invoked: 1
max operation performed: 1
implementation class UID: 1.2.826.0.1.3680043.2.60.0.1
implementation version Name: softlink_jdt103
abstract syntax                 scu scp 
1.2.840.10008.1.1               -1  -1  
1.2.840.10008.5.1.4.1.2.1.1     -1  -1  
1.2.840.10008.5.1.4.1.2.2.1     -1  -1  
1.2.840.10008.5.1.4.1.2.3.1     -1  -1  
1.2.840.10008.5.1.4.1.2.1.2     -1  -1  
1.2.840.10008.5.1.4.1.2.2.2     -1  -1  
1.2.840.10008.5.1.4.1.2.3.2     -1  -1  
nr   abstract syntax                 pcid  description                                            
0    1.2.840.10008.1.1               1     Verification SOP Class                                 
  ts-0     1.2.840.10008.1.2               Implicit VR Little Endian Transfer Syntax              
1    1.2.840.10008.5.1.4.1.2.1.1     3     Patient Root Query/Retrieve Information Model - FIND SOP Cl...
  ts-0     1.2.840.10008.1.2               Implicit VR Little Endian Transfer Syntax              
2    1.2.840.10008.5.1.4.1.2.2.1     5     Study Root Query/Retrieve Information Model - FIND SOP Cl...
  ts-0     1.2.840.10008.1.2               Implicit VR Little Endian Transfer Syntax              
3    1.2.840.10008.5.1.4.1.2.3.1     7     Patient/Study Only Query/Retrieve Information Model - FIND SOP Cl...
  ts-0     1.2.840.10008.1.2               Implicit VR Little Endian Transfer Syntax              
4    1.2.840.10008.5.1.4.1.2.1.2     9     Patient Root Query/Retrieve Information Model - MOVE SOP Cl...
  ts-0     1.2.840.10008.1.2               Implicit VR Little Endian Transfer Syntax              
5    1.2.840.10008.5.1.4.1.2.2.2     11    Study Root Query/Retrieve Information Model - MOVE SOP Cl...
  ts-0     1.2.840.10008.1.2               Implicit VR Little Endian Transfer Syntax              
6    1.2.840.10008.5.1.4.1.2.3.2     13    Patient/Study Only Query/Retrieve Information Model - MOVE SOP Cl...
  ts-0     1.2.840.10008.1.2               Implicit VR Little Endian Transfer Syntax              
***************

Waiting for AssociationRsp

ASSOCIATE_ACKNOWLEDGE detected

jdicom: #17:DICOM_QR_SCP >> A-ASSOCIATE-AC PDU

jdicom: *** acknowledge ***
max pdu size: 28672
max operation invoked: 1
max operation performed: 1
implementation class UID: 1.2.752.24.3.3.25.7
implementation version name: WIQRSCP_20_1
abstract syntax                 scu scp 
nr   pcid  result                          transfer syntax     
0    1     accepted                        1.2.840.10008.1.2   
1    3     accepted                        1.2.840.10008.1.2   
2    5     accepted                        1.2.840.10008.1.2   
3    7     accepted                        1.2.840.10008.1.2   
4    9     accepted                        1.2.840.10008.1.2   
5    11    accepted                        1.2.840.10008.1.2   
6    13    accepted                        1.2.840.10008.1.2   
*******************

jdicom: DICOM_QR_SCP Enter DimseExchange.run()

jdicom: #17:DICOM_QR_SCP << C-FIND-RQ Patient Root Query/Retrieve Information Model - FIND SOP Class

jdicom: DICOM_QR_SCP Waiting for PDU

(0000,0002) UI [1.2.840.10008.5.1.4.1.2.1.1]                #  28      1  AffectedSOPClassUID
(0000,0100) US [32]                                         #  2       1  CommandField
(0000,0110) US [1]                                          #  2       1  MessageID
(0000,0700) US [0]                                          #  2       1  Priority
(0000,0800) US [65278]                                      #  2       1  DataSetType
jdicom: #17:DICOM_QR_SCP << Dataset

(0008,0018) UI []                                           #  0       0  SOPInstanceUID
(0008,0052) CS [IMAGE]                                      #  6       1  QueryRetrieveLevel
(0010,0020) LO [19121212-1212]                              #  14      1  PatientID
(0020,000d) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476158]#  50      1  StudyInstanceUID
(0020,000e) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476159]#  50      1  SeriesInstanceUID
(0020,0013) IS []                                           #  0       0  InstanceNumber
jdicom: DICOM_QR_SCP PDU received

jdicom: #17:DICOM_QR_SCP >> C-FIND-RSP Patient Root Query/Retrieve Information Model - FIND SOP Class, status #ff00H[StatusEntry.PENDING]

(0000,0002) UI [1.2.840.10008.5.1.4.1.2.1.1]                #  28      1  AffectedSOPClassUID
(0000,0100) US [32800]                                      #  2       1  CommandField
(0000,0120) US [1]                                          #  2       1  MessageIDBeingRespondedTo
(0000,0800) US [258]                                        #  2       1  DataSetType
(0000,0900) US [65280]                                      #  2       1  Status
jdicom: #17:DICOM_QR_SCP >> Dataset

(0008,0005) CS [ISO_IR 100]                                 #  10      1  SpecificCharacterSet
(0008,0018) UI [1.3.6.1.4.1.30071.8.345050320220.6024575915205577]#  50      1  SOPInstanceUID
(0008,0050) SH [1912121-0034201]                           #  16      1  AccessionNumber
(0008,0052) CS [IMAGE]                                      #  6       1  QueryRetrieveLevel
(0008,0054) AE [DICOM_QR_SCP]                               #  12      1  RetrieveAETitle
(0010,0020) LO [19121212-1212]                              #  14      1  PatientID
(0020,000d) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476158]#  50      1  StudyInstanceUID
(0020,000e) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476159]#  50      1  SeriesInstanceUID
(0020,0010) SH [1912121-0034201]                           #  16      1  StudyID
(0020,0013) IS [1]                                          #  2       1  InstanceNumber
jdicom: DICOM_QR_SCP Waiting for PDU

jdicom: DICOM_QR_SCP PDU received

jdicom: #17:DICOM_QR_SCP >> C-FIND-RSP Patient Root Query/Retrieve Information Model - FIND SOP Class, status #0000H[Success]

(0000,0002) UI [1.2.840.10008.5.1.4.1.2.1.1]                #  28      1  AffectedSOPClassUID
(0000,0100) US [32800]                                      #  2       1  CommandField
(0000,0120) US [1]                                          #  2       1  MessageIDBeingRespondedTo
(0000,0800) US [257]                                        #  2       1  DataSetType
(0000,0900) US [0]                                          #  2       1  Status
jdicom: DICOM_QR_SCP Waiting for PDU

jdicom: Enter _dimseSCUs.waitUntilEmpty(

jdicom: Enter _as.sendReleaseRequest()

jdicom: #17:DICOM_QR_SCP << A-RELEASE-RQ PDU

jdicom: Leave DimseExchange.releaseAssoc()

jdicom: DICOM_QR_SCP PDU received

jdicom: #17:DICOM_QR_SCP >> A-RELEASE-RP PDU

jdicom: #17:DICOM_QR_SCP closing socket

jdicom: DICOM_QR_SCP Leave DimseExchange.run()



Studyroot LOG:

   1  Priority
(0000,0800) US [65278]                                      #  2       1  DataSetType
jdicom: #23:DICOM_QR_SCP << Dataset

(0008,0052) CS [SERIES]                                     #  6       1  QueryRetrieveLevel
(0008,0060) CS []                                           #  0       0  Modality
(0020,000d) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476158]#  50      1  StudyInstanceUID
(0020,000e) UI []                                           #  0       0  SeriesInstanceUID
(0020,0011) IS []                                           #  0       0  SeriesNumber
(0020,1209) IS []                                           #  0       0  NumberOfSeriesRelatedImages
jdicom: DICOM_QR_SCP PDU received

jdicom: #23:DICOM_QR_SCP >> C-FIND-RSP Study Root Query/Retrieve Information Model - FIND SOP Class, status #ff00H[StatusEntry.PENDING]

(0000,0002) UI [1.2.840.10008.5.1.4.1.2.2.1]                #  28      1  AffectedSOPClassUID
(0000,0100) US [32800]                                      #  2       1  CommandField
(0000,0120) US [1]                                          #  2       1  MessageIDBeingRespondedTo
(0000,0800) US [258]                                        #  2       1  DataSetType
(0000,0900) US [65280]                                      #  2       1  Status
jdicom: #23:DICOM_QR_SCP >> Dataset

(0008,0005) CS [ISO_IR 100]                                 #  10      1  SpecificCharacterSet
(0008,0050) SH [1912121-0034201]                           #  16      1  AccessionNumber
(0008,0052) CS [SERIES]                                     #  6       1  QueryRetrieveLevel
(0008,0054) AE [DICOM_QR_SCP]                               #  12      1  RetrieveAETitle
(0008,0060) CS [OP]                                         #  2       1  Modality
(0020,000d) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476158]#  50      1  StudyInstanceUID
(0020,000e) UI [1.3.6.1.4.1.30071.8.345050320220.6024574499476159]#  50      1  SeriesInstanceUID
(0020,0010) SH [1912121-0034201]                           #  16      1  StudyID
(0020,0011) IS [1]                                          #  2       1  SeriesNumber
(0020,1209) IS [1]                                          #  2       1  NumberOfSeriesRelatedImages
jdicom: DICOM_QR_SCP Waiting for PDU

jdicom: DICOM_QR_SCP PDU received

jdicom: #23:DICOM_QR_SCP >> C-FIND-RSP Study Root Query/Retrieve Information Model - FIND SOP Class, status #0000H[Success]

(0000,0002) UI [1.2.840.10008.5.1.4.1.2.2.1]                #  28      1  AffectedSOPClassUID
(0000,0100) US [32800]                                      #  2       1  CommandField
(0000,0120) US [1]                                          #  2       1  MessageIDBeingRespondedTo
(0000,0800) US [257]                                        #  2       1  DataSetType
(0000,0900) US [0]                                          #  2       1  Status
jdicom: DICOM_QR_SCP Waiting for PDU

jdicom: Enter _dimseSCUs.waitUntilEmpty(

jdicom: Enter _as.sendReleaseRequest()

jdicom: #23:DICOM_QR_SCP << A-RELEASE-RQ PDU

jdicom: Leave DimseExchange.releaseAssoc()

jdicom: DICOM_QR_SCP PDU received

jdicom: #23:DICOM_QR_SCP >> A-RELEASE-RP PDU

jdicom: #23:DICOM_QR_SCP closing socket

jdicom: DICOM_QR_SCP Leave DimseExchange.run()

jdicom: #24:DICOM_QR_SCP << A-ASSOCIATE-RQ PDU

jdicom: *** request ***
application context UID: null
called title: DICOM_QR_SCP
calling title: jdicom
max pdu size: 32768
max operation invoked: 1
max operation performed: 1
implementation class 

kri*_*_sw 8

从您对问题的出色描述来看,对我来说似乎很明显,您正在测试的第三个PACS显然不支持“研究根查询”。

您的关联请求是正确构成的,除了每个Presentation Context只能提出一个抽象语法外,不可能提出其他建议。但是,PACS随后会回答:

Presentation Contexts:  1
  Presentation Context:  1 [RejectAbstractSyntaxNotSupported]
       Abstract Syntax:  Study Root Query/Retrieve Information Model - FIND
       Transfer Syntax:  Implicit VR Little Endian: Default Transfer Syntax for DICOM 
Run Code Online (Sandbox Code Playgroud)

告诉您根本不支持此服务。

通信失败的日志似乎已缩短。从dcm4chee日志中,您可以得出还提出了另一个Q / R信息模型。这是患者根模型:

1    1.2.840.10008.5.1.4.1.2.1.1     3     Patient Root Query/Retrieve Information Model - FIND SOP Cl...
  ts-0     1.2.840.10008.1.2               Implicit VR Little Endian Transfer Syntax              
Run Code Online (Sandbox Code Playgroud)

知道是否支持此功能将很有趣。因为如果没有,您正在与之交谈的系统几乎不能称为“ PACS”。我建议看一下有关系统的DICOM符合性声明。它应该传达您是否在与正确的应用程序实体(标题)对话,以及是否支持Query / Retrieve服务类的特定信息模型。

如果您发布了完整的日志文件,则表示上下文可能取决于您放置查询的方式:

var request = DicomCFindRequest.CreatePatientQuery(patientId: _patientid, patientName: _patientname);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可能需要尝试CreateStudyQuery(),该方法还可以指定患者参数。

简而言之,DICOM信息模型:

  • 患者根:患者ID唯一标识患者。
  • 研究根:患者信息被视为研究级别的辅助信息

[编辑] 查看Sectra PACS的DICOM符合性声明后:也许您连接到错误的应用程序实体。Sectra PACS似乎具有不同的应用程序实体(即相同的IP,可能是相同/不同的端口,但具有不同的AET)来处理存储和查询/检索服务。您要处理的AET看起来可疑:

Calling AE Title:       TEST_01
Called AE Title:        DICOM_STORAGE
Remote host:            xxx.29.51.150
Remote port:            7817
Implementation Class:   Unknown [1.2.752.24.3.3.25.7]
Implementation Version: WISSTOSCP_20_1
Run Code Online (Sandbox Code Playgroud)

请注意被称为AE标题和实现版本。两者似乎都属于存储SCP,根据DCS的说法,它根本不支持任何查询/检索服务。

因此,我认为您需要更改要查询的AE的配置。

  • DCS很有帮助。请看我的编辑。 (2认同)
  • 这听起来不只是希望,而且我很确定它会起作用 (2认同)
  • @Hans RetrieveAETitle指定您应将后续“检索”(即C-GET或C-MOVE)定向到的SCP的应用程序实体标题(AET)。对于所有Q / R级别,应由同一AET处理“查询”(C-FIND)。 (2认同)
  • 正确,但在DCS中,只有一个应用程序实体用于查询和检索。因此,AET DICOM_QR_SCP也很可能也适合解决查询问题。 (2认同)