首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dcm4che无法将dicom文件发送到多个PACS永久应用程序-上下文-名称-不支持

Dcm4che无法将dicom文件发送到多个PACS永久应用程序-上下文-名称-不支持
EN

Stack Overflow用户
提问于 2015-04-24 21:30:45
回答 2查看 2.3K关注 0票数 0

我正在尝试发送一个dicom文件(dicomized pdf报告文件)到几个PACS系统。在某些情况下,我可以这样做,而在另一些情况下,发送dicom时,我的日志中没有任何错误。

下面是我的java代码:

代码语言:javascript
复制
public void sendDicomPdfToPacs(String dcmFilePath) throws Exception, IOException {

    Path tmpPdfDcm = Paths.get(dcmFilePath+".dcm");

    GlobalConfig cfg = new GlobalConfig();
    String localPacsAet = "";
    String localPacsIp="";
    int localPacsPort=0;
    localPacsAet = cfg.getLocalPacsAet1();
    localPacsPort = cfg.getLocalPacsPort1();
    localPacsIp = cfg.getLocalPacsIp();

    DcmEcho dcmEcho = new DcmEcho("device");
    dcmEcho.setRemoteHost(localPacsIp);
    dcmEcho.setRemotePort(localPacsPort);
    dcmEcho.setCalledAET(localPacsAet, true);
    dcmEcho.setCalling("DCMROUTER");

    Boolean dcmPacsStatus=false;

    try {
        dcmEcho.open();
        dcmPacsStatus=true;
        log.info("PACS is up and running");
        dcmEcho.close();
    } catch (IOException ex) {
        ...
    }


    if(dcmPacsStatus) {
        DcmSnd dcmsnd = new DcmSnd("device");

        //Set parameters AET
        dcmsnd.setCalledAET(localPacsAet);
        dcmsnd.setRemoteHost(localPacsIp);
        dcmsnd.setRemotePort(localPacsPort);
        dcmsnd.setCalling("DCMROUTER");

        //Set other default parameters
        dcmsnd.setOfferDefaultTransferSyntaxInSeparatePresentationContext(false);
        dcmsnd.setSendFileRef(false);
        dcmsnd.setStorageCommitment(false);
        dcmsnd.setPackPDV(true);
        dcmsnd.setTcpNoDelay(true);
        //Add DICOM file
        dcmsnd.addFile(tmpPdfDcm.toFile());
        // Configure transfer capability
        dcmsnd.configureTransferCapability();
        try {
            dcmsnd.start();
            log.info("Dicom Send initiated...");
        } catch (Exception e) {
            ...
        }

        try {
            long t1 = System.currentTimeMillis();
            dcmsnd.open();
            long t2 = System.currentTimeMillis();
            Logger.getLogger("Connected to " + localPacsAet + " in " + ((t2-t1)/1000F)+ "s");
            dcmsnd.send();
            dcmsnd.close();
            log.info("Released connection to " + localPacsAet);
        } catch (IOException e) {
           ...
        }  finally {
            dcmsnd.stop();

            /* delete dicom file! */
           ...

        }
    } else {
        log.info("Local PACS is down... Can not perform DICOM send request.");
    }
}

如果我尝试发送到Osirix PACS,那么dicom文件正在成功发送...

如果我尝试发送到其他PACS系统(例如Agfa),则会在日志中收到以下消息:

代码语言:javascript
复制
Encapsulated Document:  (0042,0011) OB #795856 [25\50\44\46\2D\31\2E\33\0A\25\E2\E3\CF\D3\0A\31\20\30\20\6F\62\...]
MIME Type of Encapsulated Document:     (0042,0012) LO #16 [application/pdf]
2015-04-24 15:57:02 INFO  ProcessPdfReportFiles:487 - Going to perfom DICOM send request for file: C:\XXXXXXXX\5912.pdf.dcm to local pacs: PACS@10.37.5.50:104
38920 [DefaultQuartzScheduler_Worker-2] INFO org.dcm4che2.net.Association - Association(1) initiated Socket[addr=/10.37.5.50,port=104,localport=53580]
38920 [DefaultQuartzScheduler_Worker-2] INFO org.dcm4che2.net.PDUEncoder - PACS(1): A-ASSOCIATE-RQ PACS << DCMROUTER
39040 [device-2] INFO org.dcm4che2.net.Association - PACS(1): A-ASSOCIATE-AC DCMROUTER >> PACS
2015-04-24 15:57:02 INFO  ProcessPdfReportFiles:500 - PACS is up and running
39041 [DefaultQuartzScheduler_Worker-2] INFO org.dcm4che2.net.PDUEncoder - PACS(1) << A-RELEASE-RQ
39045 [device-2] INFO org.dcm4che2.net.Association - PACS(1) >> A-RELEASE-RP
39045 [device-2] INFO org.dcm4che2.net.Association - PACS(1): close Socket[addr=/10.37.5.50,port=104,localport=53580]
.2015-04-24 15:57:02 INFO  ProcessPdfReportFiles:535 - Dicom Send initiated...
39058 [DefaultQuartzScheduler_Worker-2] INFO org.dcm4che2.net.Association - Association(2) initiated Socket[addr=/10.37.5.50,port=104,localport=53581]
39059 [DefaultQuartzScheduler_Worker-2] INFO org.dcm4che2.net.PDUEncoder - PACS(2): A-ASSOCIATE-RQ PACS << DCMROUTER
39191 [device-3] INFO org.dcm4che2.net.Association - PACS(2) >> org.dcm4che2.net.pdu.AAssociateRJ: A-ASSOCIATE-RJ[result=1, source=1, reason=2]: 
permanent application-context-name-not-supported
39192 [device-3] INFO org.dcm4che2.net.Association - PACS(2): close Socket[addr=/10.37.5.50,port=104,localport=53581]

所以我猜这个特定的PACS拒绝我的发送请求是因为:

代码语言:javascript
复制
A-ASSOCIATE-RJ[result=1, source=1, reason=2]: permanent application-context-name-not-supported

那么这意味着什么呢?这里我漏掉了什么?

EN

回答 2

Stack Overflow用户

发布于 2015-04-24 22:38:51

你是对的。PACS可能不支持封装的PDF SOP类。您可以通过将日志放入DEBUG来获取更多信息-如果启用了DEBUG日志记录,您收到的A-ASSOCIATE-RJ消息将指明不支持的表示上下文(SOP类+传输语法)。

http://medical.nema.org/dicom/2013/output/chtml/part08/sect_9.3.html是标准中的相关部分。

在Agfa PACS系统中,简单地存储数据可能是可配置的。使用您建议的演示文稿上下文联系站点的PACS管理员,他们也许能够添加它。

票数 1
EN

Stack Overflow用户

发布于 2015-04-25 05:53:09

服务器提供的关联拒绝原因为“不支持应用上下文名称”。这意味着SCU正在为SCP不支持的应用程序上下文名称提供UID。尝试使用DICOM 3.0的默认应用程序上下文名称UID -"1.2.840.10008.3.1.1.1“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29848835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档