You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fo-dicom从PACS保存DICOM时SaveImage方法未触发如何解决

FoDicom QueryRetrieve SCU无法触发SaveImage方法排查方案

你使用的核心代码如下:

var client = DicomClientFactory.Create(_qrServerHost, _qrServerPort, false, _aet, _qrServerAET);
client.NegotiateAsyncOps();

// 查研究列表
var request = CreateStudyRequestByPatientName("Cooper");
var studyUids = new List<string>();
request.OnResponseReceived += (req, response) =>
{
    studyUids.Add(response.Dataset?.GetSingleValue<string>(DicomTag.StudyInstanceUID));
};
await client.AddRequestAsync(request);
await client.SendAsync();

// 查对应研究下的序列
var studyUID = studyUids[0];
request = CreateSeriesRequestByStudyUID(studyUID);
var serieUids = new List<string>();
request.OnResponseReceived += (req, response) =>
{
    serieUids.Add(response.Dataset?.GetSingleValue<string>(DicomTag.SeriesInstanceUID));
};
await client.AddRequestAsync(request);
await client.SendAsync();

// 用C-GET拉取序列下的所有影像
client = DicomClientFactory.Create(_qrServerHost, _qrServerPort, false, _aet, _qrServerAET);
var cGetRequest = CreateCGetBySeriesUID(studyUID, serieUids.First());
client.OnCStoreRequest += (DicomCStoreRequest req) =>
{
    Console.WriteLine(DateTime.Now.ToString() + " recived");
    SaveImage(req.Dataset);
    return Task.FromResult(new DicomCStoreResponse(req, DicomStatus.Success));
};

var pcs = DicomPresentationContext.GetScpRolePresentationContextsFromStorageUids(
    DicomStorageCategory.Image,
    DicomTransferSyntax.ExplicitVRLittleEndian,
    DicomTransferSyntax.ImplicitVRLittleEndian,
    DicomTransferSyntax.ImplicitVRBigEndian);
client.AdditionalPresentationContexts.AddRange(pcs);
await client.AddRequestAsync(cGetRequest);
await client.SendAsync();

可按以下优先级排查问题:

  • 确认本地调用端AET(应用实体标识)已在目标DICOM服务器白名单中注册。公共测试DICOM服务器默认会拒绝未注册AET发起的C-GET请求,不会推送任何影像数据,因此不会触发OnCStoreRequest回调,自然无法进入SaveImage方法。
  • 检查Presentation Context配置是否匹配目标影像的SOP类。你当前仅添加了图像类存储上下文,如果查询到的序列包含非图像类型的SOP实例(如结构化报告、波形文件),服务器无法匹配传输上下文就不会推送对应实例。可在之前的C-FIND序列查询阶段增加SOP类UID的返回字段,将该序列下所有用到的SOP类UID都添加到Presentation Context列表中。
  • 确认C-GET请求的级别配置正确。CreateCGetBySeriesUID方法需要将查询级别正确设置为SERIES级别,同时传入的StudyInstanceUID、SeriesInstanceUID两个必填标签不存在空值、格式错误的问题。
  • 你当前发起C-GET请求的DicomClient没有调用NegotiateAsyncOps()方法,如果服务器要求异步操作协商,也会导致请求失败,建议在创建C-GET用的DicomClient后也添加该行配置。
  • 增加异常捕获和日志输出,在client.SendAsync()外层添加try-catch捕获DicomException,查看返回的错误状态码,可快速定位是权限问题、请求参数错误还是传输上下文不匹配的问题。

内容的提问来源于stack exchange,提问作者Mike Murphy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:09:04