Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WorklistQuery(C-FIND)返回C-FIND响应[2]:不支持可选键_C#_Dicom_Fo Dicom - Fatal编程技术网

C# WorklistQuery(C-FIND)返回C-FIND响应[2]:不支持可选键

C# WorklistQuery(C-FIND)返回C-FIND响应[2]:不支持可选键,c#,dicom,fo-dicom,C#,Dicom,Fo Dicom,特定PACS的C-Find(请求工作列表)返回“不支持可选密钥”,并且不返回任何数据。我还尝试使用空字符串“”而不是空字符串作为患者id、现有patientid和其他具有相同结果的字符串。 该请求适用于其他PAC 这里发生了什么,如何解决 请求代码(使用DICOM fo DICOM): var cfind=DicomCFindRequest.CreateWorklistQuery(); List dslist=新列表(); cfind.OnResponseReceived=(DicomCFind

特定PACS的C-Find(请求工作列表)返回“不支持可选密钥”,并且不返回任何数据。我还尝试使用空字符串“”而不是空字符串作为患者id、现有patientid和其他具有相同结果的字符串。 该请求适用于其他PAC

这里发生了什么,如何解决

请求代码(使用DICOM fo DICOM):

var cfind=DicomCFindRequest.CreateWorklistQuery();
List dslist=新列表();
cfind.OnResponseReceived=(DicomCFindRequest rq,DicomCFindResponse rp)=>
{
如果(rp.Status!=DicomStatus.Pending)
{                 
返回;
}           
dslist.Add(rp.Dataset);
};
var client=new DicomClient();
client.AddRequest(cfind);
尝试
{                
等待client.sendaync(destp、port、useTLS、callingAE、calledAE);
}
捕获(例外e)
{
错误(e);
}
这是日志

2019-02-09 09:49:01.6540信息Dicom.Log.NLogManager+NLogger.Log测试\u 01WL->关联请求:
呼叫AE标题:XXXXXXXXX
被称为AE标题:TEST_01WL
远程主机:XXX.29.51.XXX
远程端口:9895
实现类:实现类UID[1.3.6.1.4.1.30071.8]
实施版本:fo dicom 4.0.0
最大PDU长度:16384
调用的异步操作:1
执行的异步操作:1
演示上下文:1
演示背景:1[拟议]
抽象语法:模态工作列表信息模型-查找
传输语法:隐式VR Little Endian:的默认传输语法
DICOM
2019-02-09 09:49:01.6540信息Dicom.Log.NLogManager+NLogger.Log测试_01WL C-Find请求[2]
2019-02-09 09:49:01.8240 INFO Dicom.Log.NLogManager+NLogger.Log TEST_01WL所以我解决了这个问题,“可选密钥不受支持”是一条信息消息,实际收到了数据

        request.OnResponseReceived += (req, rp) =>
        {
            if (rp.HasDataset)
            {
                dslist.Add(rp.Dataset);
            }

            if (rp.Status != DicomStatus.Pending && rp.Status != DicomStatus.QueryRetrieveOptionalKeysNotSupported)
            {                    
                return;
            }              
        };

仅添加状态的含义:它告诉您,您的请求指定了工作列表SCP不支持的匹配密钥。这意味着您可能会在响应中收到与您的查询条件不匹配的工作列表记录,这些记录应该已被SCP过滤掉。

我始终建议在返回此类消息时阅读DICOM一致性声明。通常,供应商会在那里描述他们的错误消息的含义以及他们实际支持的dicom标记。同意。然而,在这种情况下,DICOM本身所描述的状态代码的含义毫无疑问。见PS3.4,表K.4-1
        request.OnResponseReceived += (req, rp) =>
        {
            if (rp.HasDataset)
            {
                dslist.Add(rp.Dataset);
            }

            if (rp.Status != DicomStatus.Pending && rp.Status != DicomStatus.QueryRetrieveOptionalKeysNotSupported)
            {                    
                return;
            }              
        };