N-ACTION
约 633 字大约 2 分钟
PACSDICOMDIMSEN-ACTION
2026-03-20
N-ACTION 属于 DICOM 的 Normalized DIMSE 服务,不像 C-FIND、C-MOVE 那样常见于通用影像查询检索,但在 Storage Commitment、打印管理、MPPS 等业务里经常会出现。
1. 它解决什么问题
N-ACTION 可以理解为“针对某个规范化对象实例发起一个动作请求”。它不是简单查询,也不是直接存储,而是要求对端对某个对象执行一个定义好的动作。
常见理解方式可以是:
- 指定某个 SOP Class。
- 指定该类下的某个 SOP Instance。
- 指定要执行的 Action Type ID。
- 按需附带动作参数数据集。
2. 最常见场景:Storage Commitment
在实际 PACS 对接里,N-ACTION 最常见的场景之一是 Storage Commitment:
- 本地系统先把影像通过 9.C-STORE 发送给 PACS。
- 随后发起 N-ACTION,请求 PACS 对这批对象执行存储承诺。
- PACS 在后续通过 13.N-EVENT-REPORT 返回承诺结果。
也就是说,N-ACTION 和 N-EVENT-REPORT 往往是成对出现的。
3. 请求通常由哪些字段构成
一个 N-ACTION 请求通常需要明确:
- Requested SOP Class UID。
- Requested SOP Instance UID。
- Action Type ID。
- 动作参数 Dataset。
一个示意写法如下:
var request = new DicomNActionRequest(
requestedSopClassUid,
requestedSopInstanceUid,
actionTypeId);
request.Dataset = actionDataset;
request.OnResponseReceived += (req, response) =>
{
Console.WriteLine($"N-ACTION status: {response.Status}");
};这里的具体 UID、Action Type ID 和 Dataset 结构,取决于你正在实现的服务类定义。
4. 为什么它比 C 系列更难调
因为它高度依赖具体业务规范,而不是一个“所有 PACS 都一样”的通用查询流程。排查时通常要同时看:
- 目标服务类是否支持 N-ACTION。
- 使用的 SOP Class UID 是否正确。
- Action Type ID 是否匹配对端实现。
- Dataset 是否符合约定格式。
5. 使用建议
- 如果是做 Storage Commitment,不要只实现发送 N-ACTION,还要同时准备接收 13.N-EVENT-REPORT。
- 先拿到对端接口文档,再写代码,单靠猜字段通常调不通。
- 联调时尽量保留完整请求和响应日志,方便核对 UID、事件号和实例号。
6. 实战延伸
如果你要把它放进完整业务流程里,继续看 14.Storage Commitment 流程总览 和 15.发送影像并发起存储承诺.md。