2

我想运行一个返回DicomStatus SOPClassNotSupportedif 的 fo-DICOM 服务器,例如我尝试CStoreRequest使用封装 PDF 文档的 SOP 类对其进行操作。我可以将 SOP 类定义为预先拒绝,而不必在OnCStoreRequest()方法中明确拒绝它吗?

到目前为止我所拥有的:

public DicomCStoreResponse OnCStoreRequest(DicomCStoreRequest request)
{
   DicomStatus dicomStatus = DicomStatus.Success;
   var SOPClassUID = request.Dataset.GetSingleValue<DicomUID>(DicomTag.SOPClassUID);
   if(SOPClassUID == DicomUID.EncapsulatedPDFStorage) {
      dicomStatus = DicomStatus.SOPClassNotSupported;
   }
   return new DicomCStoreResponse(request, dicomStatus);
}

上面的代码有效,但如果有一些官方/内置的方式来定义要拒绝的 SOP 类,我会采取不同的做法。

4

1 回答 1

3

您可以在 ASSOCIATION 级别控制此行为。在发送 ASSOCIATE_ACCEPT 之前验证建议的抽象语法。

public Task OnReceiveAssociationRequestAsync(DicomAssociation association)
{
    foreach(var pc in association.PresentationContexts)
    {
        if(pc.AbstractSyntax == DicomUID.EncapsulatedPDFStorage)
            pc.SetResult(DicomPresentationContextResult.RejectAbstractSyntaxNotSupported);
        else
        {
            pc.AcceptTransferSyntaxes(AcceptedImageTransferSyntaxes);
            pc.SetResult(DicomPresentationContextResult.Accept);
        }
    }

    return SendAssociationAcceptAsync(association);
}

您收到的DicomAssociation association是 ASSOCIATION_REQUEST。将association.PresentationContexts所有提议的表示上下文保存在收到的关联中。你逐一列举。每个提议的表示上下文都包含抽象语法和提议的传输语法列表。您可以遍历传输语法列表并设置您喜欢的一种;由于您的问题与此无关,因此我在代码中跳过了该部分。

如果您可以接受(接收/处理)建议的抽象语法和传输语法对,则通过设置其结果来接受该特定的表示上下文。如果不这样做,请根据原因相应地设置结果。

最后,发送 ASSOCIATE_ACCEPT(或拒绝...)。

于 2020-02-03T15:08:15.707 回答