C-Move response: no pending status

302 views
Skip to first unread message

harald.k...@gmail.com

unread,
Nov 8, 2018, 11:09:34 AM11/8/18
to Orthanc Users
Hello

I just did perform a C-MOVE on the Orthanc PACS and realized, that right after requesting the C-MOVE I get the C-MOVE-Response in with status=Success and 1 Completed sub-operation. 
And only right after this, the PACS starts to actually perform the C-STORE actions on my SCP.

According to the standard, this does not seem to be correct, right?

It says:
When the number of Remaining sub-operations reaches zero, the SCP shall generate a final response with a status equal to Success, Warning, Failure, or Refused. 

According to this, only when the last sub-op was sent over, I get the success response, right?

Also compare


What should I do to actually correctly handle the C-MOVE then?
How would I know, when the last C-Store was received?
I do not get any number of remaining items nor the success message at the right time.

Cheers,
Harald

harald.k...@gmail.com

unread,
Nov 8, 2018, 11:12:41 AM11/8/18
to Orthanc Users
To add something more here:
I tried with Dicoogle PACS and the open PACS from DicomserverUK as well as a Phoenix PACS.
All those send the success in the end, which means, according to the standard, I could rely on the incoming success message and then know, that all C-Stores went through and I received the last instance.

Sébastien Jodogne

unread,
Nov 9, 2018, 7:46:31 AM11/9/18
to Orthanc Users
Hello,

This asynchronous sending of DICOM files as implemented in Orthanc can also be seen in commercial PACS systems. The DICOM SCP only says that it has successfully received all the transfer requests, but the transfers themselves can be delayed.

If this behavior is problematic to you, just set the "SynchronousCMove" configuration option of Orthanc to "true":

Sébastien-

Harald Köstinger

unread,
Nov 12, 2018, 9:49:48 AM11/12/18
to Orthanc Users
Hello,

The thing with that behavior is, that it is not according to the standard, right?
Even though other PACS may implement it that way, it is not correct.

The C-MOVE response actually shall help the requesting party to:
  • see when the TARGET AE finally received all files
  • maybe have some "pending" status updates in the meantime to display a progress bar or the like
In the current implementation, the C-MOVE response itself is rather useless. 
The requesting party would never know, if the C-MOVE to the TARGET AE actually was successful or not.
It would just know, if the SCP understood the C-MOVE request, but nothing more.

Harald

Sébastien Jodogne

unread,
Nov 12, 2018, 9:57:57 AM11/12/18
to Orthanc Users
Hello,

As this is a question about the DICOM standard on which I cannot decide by myself, I highly suggest you to ask the question on the dedicated forum:

I'll happily revert the default behavior of Orthanc to "SynchronousCMove" be defined as "true" (which was the case for Orthanc <= 1.3.2), if DICOM experts say so.

Regards,
Sébastien-

Harald Köstinger

unread,
Nov 13, 2018, 2:01:29 AM11/13/18
to Orthanc Users
Hello,

I now did post this question in the DICOM group:

Cheers,
Harald

Harald Köstinger

unread,
Nov 15, 2018, 5:20:30 AM11/15/18
to Orthanc Users
There is now some reply to my question.

Seems, that my expected behavior is the correct one, according to the standard.
Which would mean, that Orthanc is not behaving according to the standard, when you do configure async handling of C-MOVE RQs.

Sébastien Jodogne

unread,
Nov 15, 2018, 5:40:29 AM11/15/18
to Orthanc Users
OK, so here's my answer on the DICOM forum:

"Hello, 

I write as the author of Orthanc. 

As the consensus on this forum seems to be to use "synchronous" C-STORE together with C-MOVE sub-operations, the default behavior of Orthanc was adapted accordingly by the following changeset: 

This changeset is pending in our mainline, and will be part of forthcoming 1.4.3 release. Note that "synchronous C-Move" was the default behavior of Orthanc <= 1.3.2. 

Regards, 
Sébastien-"

kozu...@gmail.com

unread,
Nov 19, 2018, 4:43:22 AM11/19/18
to Orthanc Users
Hi,

One related thing I've had on my mind for some time and wanted to ask: is there an asynchronous way to retrieve imaging from remote modality via HTTP. Currently the POST to:

/queries/{id}/retrieve

blocks until the operation is completed in Orthanc. If there is a lot of data to fetch from the remote modality this can take minutes and the connection might timeout on the client (which one can usually configure), but also on an intermediate HTTP proxy (which one might not). Then there's no way to tell when the operation completed.

Depending on the architecture of the HTTP client used to talk to Orthanc this potentially blocks a client thread for the entire period.

Thanks for any insights,

Ales

Sébastien Jodogne

unread,
Nov 19, 2018, 8:49:56 AM11/19/18
to Orthanc Users
Hello,

You can set the "Synchronous" option to "false" while initiating a C-MOVE operation from the REST API. This will create a job and the HTTP request will end immediately. For instance:

# curl http://localhost:8042/queries/7e599bad-270e-4d7b-9ea4-f0bbaa00c134/retrieve -d '{"TargetAet":"PACS","Synchronous":false}'
{
   "ID" : "a67b1332-7cbe-4f02-a51b-6f0b96935a0f",
   "Path" : "/jobs/a67b1332-7cbe-4f02-a51b-6f0b96935a0f"
}

HTH,
Sébastien-

kozu...@gmail.com

unread,
Nov 20, 2018, 10:44:15 AM11/20/18
to Orthanc Users
Hi Sebastien,

thanks for the hint, I tested this today but for some reason am unable to pass a JSON object as the payload. I tried:

curl -d '{"TargetAet":"MY-AET","Synchronous":false}' 'https://myorthanc/queries/ee7eac32-877d-43db-9278-c6772c8ec073/retrieve'

whereby Orthanc logs:

W1120 15:28:09.572323 OrthancRestModalities.cpp:540] Driving C-Move SCU on modality: {"TargetAet":"MY-AET","Synchronous":false}

Note that it considers the entire POST payload as AET. Then this works of course but is synchronous:


Orthanc version we use is 1.4.1. Where am I doing wrong?

Thanks,

Ales

Sébastien Jodogne

unread,
Nov 20, 2018, 12:31:34 PM11/20/18
to Orthanc Users
Sorry, this feature is visibly only available in the Orthanc mainline currently.

You'll have to wait until forthcoming 1.4.3 release, to build Orthanc from source, or to use nightly builds of the mainline.

Here is for instance the link to the nightly debug LSB (Linux Standard Base) binaries:

The Docker image "jodogne/orthanc" can also be pulled to use the mainline version:

Sébastien-

Felix Nensa

unread,
Nov 22, 2018, 4:23:47 AM11/22/18
to Sébastien Jodogne, Orthanc Users

Dear Sébastien,

 

is this {"TargetAet":"MY-AET","Synchronous":false} syntax available for the “/modalities/{dicom}/move” API as well?

 

Thanks,

Felix

kozu...@gmail.com

unread,
Nov 22, 2018, 9:18:53 AM11/22/18
to Orthanc Users
> You'll have to wait until forthcoming 1.4.3 release, to build Orthanc from source, or to use nightly builds of the mainline.

Hi Sebastien,

thanks for clarifying. We're upgrade to the new version when it's out to use the async retrievals.

Best regards,

Ales

Sébastien Jodogne

unread,
Nov 24, 2018, 6:25:54 AM11/24/18
to Orthanc Users
Hello,

Driving a C-MOVE on a remote modality is only available in synchronous mode. Here is a sample call:

# curl http://localhost:8042/modalities/pacs/move -X POST -d '{"Resources":[{"StudyInstanceUID":"1.3.51.0.1.1.192.168.29.133.1681753681732"}],"TargetAet":"STORESCP","Level":"Study"}'

Sébastien-
Reply all
Reply to author
Forward
0 new messages