DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误
DCMTK Understand the "DIMSE No valid Presentation Context ID" error
我目前正在开发一个简单的应用程序,用于在PACS上查询/检索数据。为此,我使用 DCMTK 并使用 DCM4CHEE PACS 作为测试服务器。
我的目标是实现简单的C-FIND查询,以及一个C-MOVE检索系统(再加上一个自定义SCP来实际下载数据(。
为此,我创建了一个 CustomSCU 类,该类继承了 DCMTKDcmSCU类。
我首先实现了 C-ECHO 消息,效果很好。
然后,我尝试实现 C-FIND 请求,但我从我的应用程序中收到错误"DIMSE 没有有效的表示上下文 ID">(下一段中将详细介绍(,但没有来自DCM4CHEE的其他日志。然后我使用命令工具findscu(来自 dcmtk(查看是否存在一些配置问题,但该工具工作正常。因此,为了实现我的 C-FIND 请求,我阅读了findscu的源代码(这里(并在我的代码中对其进行了调整(这意味着我没有使用DcmSCU::sendCFindRequest而是使用DcmFindSU类(。
但是现在,我在C-MOVE请求中遇到了同样的问题。我的代码非常简单:
//transfer syntaxes
OFList<OFString> ts;
ts.push_back(UID_LittleEndianExplicitTransferSyntax);
ts.push_back(UID_BigEndianExplicitTransferSyntax);
ts.push_back(UID_LittleEndianImplicitTransferSyntax);
//sop class
OFString pc = UID_MOVEPatientRootQueryRetrieveInformationModel;
addPresentationContext(pc, ts);
DcmDataset query;
query.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "PATIENT");
query.putAndInsertOFStringArray(DCM_PatientID, <ThePatientId>);
OFCondition condition = sendMOVERequest(findPresentationContextID(pc, ""), getAETitle(), &query, nullptr);
return condition.good();
我也尝试使用UID_MOVEStudyRootQueryRetrieveInformationModel而不是UID_MOVEPatientRootQueryRetrieveInformationModel,结果相同:我的应用程序显示错误
DIMSE 没有有效的演示上下文 ID
据我了解,表示上下文是一个或多个传输语法和一个 SOP 类的串联。我读到问题可能来自不接受我的演示上下文的 PACS。可以肯定的是,我使用了movescu工具(来自DCMTK(。它奏效了,我在 de 服务器 DCM4CHEE 的日志中看到了这一点:
received AAssociatedRQ
pc-1 : as=<numbers>/Patient Root Q/R InfoModel = FIND
ts=<numbers>/Explicit VR Little Endian
ts=<numbers>/Explicit VR Big Endian
ts=<numbers>/Implicit VR Little Endian
这意味着 movescu 工具在尝试实际移动之前会进行查找? 因此,我使用 :
OFList<OFString> ts;
ts.push_back(UID_LittleEndianExplicitTransferSyntax);
ts.push_back(UID_BigEndianExplicitTransferSyntax);
ts.push_back(UID_LittleEndianImplicitTransferSyntax);
OFString pc1 = UID_FINDPatientRootQueryRetrieveInformationModel;
OFString pc = UID_MOVEPatientRootQueryRetrieveInformationModel;
addPresentationContext(pc1, ts);
addPresentationContext(pc, ts);
(也尝试过学习根(
但这并没有起到作用。 问题似乎出在客户端,如findPresentationContextID(pc, "(;无论如何,始终返回 0。
我觉得不可能调整 movescu 工具的代码,因为它看起来非常复杂,不足以进行简单的检索操作。
我不知道该尝试什么。我希望有人能帮助我了解发生了什么。这是我应用程序的最后一部分,因为存储SCP已经工作了。
问候
看起来您没有与 PACS 协商关联。
添加表示上下文后,在发送任何命令之前,SCU 必须连接到 PACS 并与DcmSCU::initNetwork
协商演示上下文,然后DcmSCU::negotiateAssociation
。
- #为""定义宏;静态";针对不同的上下文
- 与互斥锁相比,旋转锁可以保证上下文切换
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- 错误"Could not find Boost"(缺少:上下文标头)
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 如何获取 GLFW 窗口 ID?
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 显示数组中的学生 ID 和最高分
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误
- 激活上下文生成失败,依赖程序集,并行,事件 ID 33
- SSL握手错误:会话id上下文未初始化