2017-02-16 188 views
2

我試圖實現存儲承諾與FO-DICOM框架,但沒有結果。我能夠創建N-ACTION請求。我能夠收到N-ACTION迴應。但我不知道如何收到EVENTREPORT。任何人都可以幫助我,並以正確的方式解決我的問題?存儲承諾與fo-dicom

private DicomStatus _responseStatus; 

public void SendRequestForCommitment(string scImageUid) 
{ 
    var client = new DicomClient(); 

    var nAction = new DicomNActionRequest(DicomUID.StorageCommitmentPushModelSOPClass, 
     new UIDGenerator().PrivatelyDefinedSoapInstanceUid(), 1); 

    var ds = new DicomDataset(); 
    nAction.Dataset = ds; 
    nAction.Dataset.Add(DicomTag.TransactionUID, new UIDGenerator().uid); 

    var sps = new DicomDataset(); 
    nAction.Dataset.Add(new DicomSequence(DicomTag.ReferencedSOPSequence, sps)); 

    sps.Add(DicomTag.ReferencedSOPClassUID, DicomUID.SecondaryCaptureImageStorage); 
    sps.Add(DicomTag.ReferencedSOPInstanceUID, scImageUid); 

    DicomNActionRequest.ResponseDelegate nActionResponseDelegate = NActionResponse; 
    nAction.OnResponseReceived = nActionResponseDelegate; 

    client.AddRequest(nAction); 
    client.Send("127.0.0.1", 105, false, "myAE", "DVTK_STRC_SCP"); 


} 

private void NActionResponse(DicomNActionRequest request, DicomNActionResponse response) 
{ 
    _responseStatus = response.Status; 
} 
+1

到目前爲止你有什麼? – SaggingRufus

+0

好吧剛剛包括我的代碼:方法SendRequestForCommitment發送NACTION請求到存儲,scImageUid參數是輔助捕獲圖像的標識符我想在安全存儲時被通知,NActionResponse接收NACTION調用的響應....但如何連接存儲中的EVENTREPORT消息? –

+0

我很失望,因爲這個問題已被投票結束,因爲廣泛的我不同意這種動機。誰知道fo-dicom可能會說明我正在嘗試做什麼...我需要接收並解析從存儲器發回的EventReport,並且我想知道是否有人知道如何使用服務完成此任務/功能已在fo-di com中實施 –

回答

2

聲明:我從來沒有使用過FO-DICOM。下面的代碼只是一個僞代碼,並不是FO-DICOM語法。我希望查看僞代碼,您將能夠在工具包中找出確切的成員(屬性,方法和事件)。

在您的代碼中,您已經在構建請求數據集。然後,您打電話client.AddRequest(nAction);,然後client.Send(.......);。我認爲這將內部建立連接,關聯並將發送NAction請求。

然後您已訂閱private void NActionResponse(....)事件。我假設這個事件正在被解僱,你正在獲得NAction Response。

同樣,您應該訂閱NEventReport事件東西(查找工具包中的確切語法)像以下:

private void NEventReportReceived(DicomNEventReport request, ......) 
{ 
    //Parse the request here. 
    //Check what files were archived and what were failed. 
    //Do your stuff accordingly. 
    //Send NEventReport response conveying the status. 

    client.SendReleaseRequest(); 
} 

訂閱另一個事件來處理釋放響應。

private void ReleaseResponseReceived(......) 
{ 
    //Close connection 
} 

正如我在other回答說,你應該SCU必須處理NEventReport能力。您已通過書寫行client.AddRequest(nAction);將NAction添加到您的客戶。檢查工具包文檔以查看是否還需要爲NEventReport添加類似內容。我強烈認爲這不應該需要;你只需要訂閱一個事件。