Problems with C-Store?

Hello everyone,

thanks for your help! We want to use orthancteam/orthanc under Docker as a scientific PACS in our clinic.

The Docker instance is currently running on an Ubuntu 20.04 LTS ESXi VM. A Deep Unity Diagnost (formerly Agfa IMPAX R20) is used as DICOM viewer.

I can send a C-Find request to Orthanc and get a response. However, as soon as I trigger a Q/R from a patient or image study, I only get some metadata but no images / series. C-Store Request or Response is set to “success”.

Unfortunately my DICOM knowledge is not very profound. Perhaps someone has an idea or has already successfully tested a similar configuration.

config:

Deep Unity Diagnost:
CalledAET: ORTHANC
Host: 193.196.214.129
Port: 4242
CallingAET: IMPAX6229UKF
RelationalQuery: true
CloseImmediatly: false
MultivaluedUIDs: true
SecureConnection: false
NoExtendedNegotation: true
WadoURL: http://193.196.214.129:8042/dicom-web/servers/orthanc

Docker-compose.yml:
version: ‘3.8’

services:
orthanc:
image: orthancteam/orthanc
ports:
- 4242:4242
- 8042:8042
environment:
- ORTHANC_NAME=ORTHANC_RAD
depends_on:
- postgres
volumes:
- OrthancStorage:/etc/orthanc/OrthancStorage
- ./orthanc.json:/etc/orthanc/orthanc.json:ro
# need to sync time
- “/etc/timezone:/etc/timezone:ro”
- “/etc/localtime:/etc/localtime:ro”

postgres:
image: postgres:13
container_name: orthanc_postgres
environment:
POSTGRES_DB: orthanc
POSTGRES_USER: orthanc
POSTGRES_PASSWORD: *****
volumes:
- OrthancDBbackup:/etc/orthanc/OrthancDBbackup
# postgres dir here in orthanc folder
- ./postgres_data:/var/lib/postgresql/data
- “/etc/timezone:/etc/timezone:ro”
- “/etc/localtime:/etc/localtime:ro”

volumes:
OrthancStorage:
driver_opts:
type: “nfs”
device: “:/mnt/IMG/orthanc/OrthancStorage”
o: “addr=193.196.214.184,nfsvers=4”
OrthancDBbackup:
driver_opts:
type: “nfs”
device: “:/mnt/IMG/orthanc/OrthancDBbackup”
o: “addr=193.196.214.184,nfsvers=4”

Orthanc.json:

"Name": "ORTHANC_RAD",
"DicomServerEnabled" : true,
"DicomAet": "ORTHANC",
"DicomPort" : 4242,
"DicomCheckCalledAet" : false,
"UnknownSopClassAccepted" : true,
"DicomScpTimeout" : 120,
"DicomScuTimeout" : 30,

// we can send to other pacs 
"DicomModalities" : 
{
    "NORA_RAD"  : [ "NORA_RAD", "10.231.0.161", 1104 ],
    "NORA_MOVE" : [ "NORA_MOVE", "10.231.0.161", 1106 ],
    "RAD-HGCP393" : [ "RAD-HGCP393", "193.196.198.119", 5105 ],
    "PACS": {
      "AET" : "IMPAX6229UKF",
      "Host" : "193.196.214.76",
      "Port" : 11112,
      //"Manufacturer" : "Generic",
      "AllowEcho" : true,
      "AllowGet" : true,
      "AllowFind" : true,
      "AllowFindWorklist" : true,
      "AllowMove" : true,
      "AllowStore" : true,
      "AllowTranscoding" : true,
      "Timeout" : 120
      }
},

"StorageDirectory": "/etc/orthanc/OrthancStorage",
"PostgreSQL" : 
{
    "EnableIndex" : true,
    "EnableStorage" : false, // if true, all dicoms will be stored in database instead of StorageDirectory
    "Host" : "postgres",
    "Port" : 5432,
    "Database" : "orthanc",
    "Username" : "orthanc",
    "Password" : "****"
},

// we could also enable http ssl, see template config

"HttpServerEnabled" : true,
"HttpDescribeErrors" : true,
"OrthancExplorerEnabled" : true,
"RemoteAccessAllowed" : true,
"HttpPort" : 8042,
"AuthenticationEnabled" : true,
"RegisteredUsers" : 
{
    "orthanc" : "thancor"
},

"DicomWeb" : {
  "Enable" : true,
  "Root" : "/dicom-web/",
  "EnableWado" : true,
  "EnableWadoUri" : true,
  "EnableWadoRs" : true,
  "WadoRoot" : "/wado",
  "Ssl" : false,
  "Host" : "193.196.214.129:8042",
  "Port" : 8042,
  "QidoCaseSensitive" : false,
  "QidoExtendedNegotiation": false,
  "QidoMaximumResults": 100,
  "StudiesMetadata" : "Full",
  "SeriesMetadata" : "Full",
  "Servers" : {
    "ORTHANC" : [ "http://193.196.214.129:8042/dicom-web/", "orthanc", "thancor" ]
    }
  },


  "Gdcm" : {
    "Throttling" : 4,
    "RestrictTransferSyntaxes" : [
      "1.2.840.1008.1.2.4.50",
      "1.2.840.1008.1.2.4.51",
      "1.2.840.1008.1.2.4.57",
      "1.2.840.1008.1.2.4.70",
      "1.2.840.1008.1.2.4.90",
      "1.2.840.1008.1.2.4.91"
    ]
  }

}

Logs:

===================== INCOMING DIMSE MESSAGE ====================
Message Type : C-STORE RSP
Presentation Context ID : 1
Message ID Being Responded To : 1
Affected SOP Class UID : DigitalXRayImageStorageForPresentation
Affected SOP Instance UID : 1.3.46.670589.30.36.0.1.72567767433727.1708513385346.3
Data Set : none
DIMSE Status : 0x0000: Success
======================= END DIMSE MESSAGE =======================
I0227 14:04:45.036011 DICOM-3 DicomAssociation.cpp:111] (dicom) Closing DICOM association
I0227 14:04:45.040776 DICOM-3 CommandDispatcher.cpp:931] (dicom) Finishing association with AET IMPAX6229UKF on IP 193.196.198.119: DUL Peer Requested Release
I0227 14:04:45.040815 DICOM-3 CommandDispatcher.cpp:939] (dicom) Association Release with AET IMPAX6229UKF on IP 193.196.198.119
T0227 14:04:45.052796 DICOM-2 DicomStoreUserConnection.cpp:440] (dicom) Received Store Response:
===================== INCOMING DIMSE MESSAGE ====================
Message Type : C-STORE RSP
Presentation Context ID : 1
Message ID Being Responded To : 1
Affected SOP Class UID : DigitalXRayImageStorageForPresentation
Affected SOP Instance UID : 1.3.46.670589.30.36.0.1.72567767433727.1708513385277.3
Data Set : none
DIMSE Status : 0x0000: Success
======================= END DIMSE MESSAGE =======================
I0227 14:04:45.093013 DICOM-1 DicomAssociation.cpp:111] (dicom) Closing DICOM association
I0227 14:04:45.096657 DICOM-1 CommandDispatcher.cpp:931] (dicom) Finishing association with AET IMPAX6229UKF on IP 193.196.198.119: DUL Peer Requested Release
I0227 14:04:45.096728 DICOM-1 CommandDispatcher.cpp:939] (dicom) Association Release with AET IMPAX6229UKF on IP 193.196.198.119
T0227 14:04:45.157498 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [user-agent]: [Java/11.0.14]
T0227 14:04:45.157580 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [host]: [193.196.214.129:8042]
T0227 14:04:45.157599 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [accept]: [text/html, image/gif, image/jpeg, *; q=.2, /; q=.2]
T0227 14:04:45.157614 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [connection]: [keep-alive]
T0227 14:04:45.173541 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [user-agent]: [Java/11.0.14]
T0227 14:04:45.173611 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [host]: [193.196.214.129:8042]
T0227 14:04:45.173628 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [accept]: [text/html, image/gif, image/jpeg, *; q=.2, /; q=.2]
T0227 14:04:45.173643 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [connection]: [keep-alive]
T0227 14:04:45.192908 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [user-agent]: [Java/11.0.14]
T0227 14:04:45.193008 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [host]: [193.196.214.129:8042]
T0227 14:04:45.193043 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [accept]: [text/html, image/gif, image/jpeg, *; q=.2, /; q=.2]
T0227 14:04:45.193059 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [connection]: [keep-alive]
T0227 14:04:45.295857 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [user-agent]: [Java/11.0.14]
T0227 14:04:45.295955 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [host]: [193.196.214.129:8042]
T0227 14:04:45.295980 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [accept]: [text/html, image/gif, image/jpeg, *; q=.2, /; q=.2]
T0227 14:04:45.296002 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [connection]: [keep-alive]
T0227 14:04:45.388774 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [user-agent]: [Java/11.0.14]
T0227 14:04:45.388905 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [host]: [193.196.214.129:8042]
T0227 14:04:45.388945 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [accept]: [text/html, image/gif, image/jpeg, *; q=.2, /; q=.2]
T0227 14:04:45.388987 HTTP-24 HttpServer.cpp:1186] (http) HTTP header: [connection]: [keep-alive]
T0227 14:04:49.542670 HTTP-25 HttpServer.cpp:1186] (http) HTTP header: [user-agent]: [Java/11.0.14]
T0227 14:04:49.542785 HTTP-25 HttpServer.cpp:1186] (http) HTTP header: [host]: [193.196.214.129:8042]
T0227 14:04:49.542812 HTTP-25 HttpServer.cpp:1186] (http) HTTP header: [accept]: [text/html, image/gif, image/jpeg, *; q=.2, /; q=.2]
T0227 14:04:49.542834 HTTP-25 HttpServer.cpp:1186] (http) HTTP header: [connection]: [keep-alive]
T0227 14:04:50.046012 HTTP-25 HttpServer.cpp:1186] (http) HTTP header: [user-agent]: [Java/11.0.14]
T0227 14:04:50.046167 HTTP-25 HttpServer.cpp:1186] (http) HTTP header: [host]: [193.196.214.129:8042]
T0227 14:04:50.046195 HTTP-25 HttpServer.cpp:1186] (http) HTTP header: [accept]: [text/html, image/gif, image/jpeg, *; q=.2, /; q=.2]
T0227 14:04:50.046217 HTTP-25 HttpServer.cpp:1186] (http) HTTP header: [connection]: [keep-alive]
T0227 14:04:52.413416 SAVE-JOBS ServerContext.cpp:327] Serializing the content of the jobs engine
T0227 14:04:52.413543 SAVE-JOBS OrthancPlugins.cpp:5882] (plugins) Calling service 38 from plugin /usr/share/orthanc/plugins/libOrthancDicomWeb.so
T0227 14:04:52.413577 SAVE-JOBS JobsRegistry.cpp:296] Job backup is not supported for job of type: DicomWebWadoRetrieveClient

i found this error in the logs:
E0228 13:55:33.568367 DICOM-0 OrthancException.cpp:61] Bad file format: While creating a DICOM instance, tag (6000,0050) has out-of-range value: “1\1”

As i read in another thread the solution to this problem is to set:
“StudiesMetadata” : “Full”,
“SeriesMetadata” : “Full”

But that didnt work …

Hello,

Well, this clearly indicates an issue in your DICOM instance. Please share a sample problematic DICOM image, as well as a minimal working example so that we can reproduce the issue.

Regards,
Sébastien-