Redirect WADO URI Requests - dcm4che/dcm4chee-arc-light GitHub Wiki

Overview

Enable redirection of WADO URI requests for unavailable objects in archive to an external archive.

Configuration

Create a Remote Application Entity for an external archive and also create Web Application referencing WADO_URI as Web Service Class. The Web Service Path shall reflect the URL path of WADO-URI service used by the external archive.

Alternatively, if the second archive is also an instance of DCM4CHEE archive, then one may just clone the original archive device dcm4chee-arc and change the AET in the Web Service Path and the associated AE Title field in the cloned Web Applications.

Using Archive UI

This feature may be configured on :

  • Archive Device level - to redirect WADO-URI requests for unavailable objects received by any Application Entity of the Archive :

    Go to Menu -> Configuration -> Devices -> dcm4chee-arc -> Device Extension -> Archive Device Extension.

OR

  • Application Entity level - to redirect WADO-URI requests for unavailable objects received by this Application Entity of the Archive

    Go to Menu -> Configuration -> Devices -> dcm4chee-arc -> Child Objects -> DCM4CHEE -> Network AE Extension -> Archive Network AE Extension.

Set Fallback WADO-URI Web Application Name as the web application name (having WADO-URI as Web Service Class) of external archive. Also set a Fallback WADO-URI HTTP Status Code. By default this is set to 303. Valid values are 301, 302, 303 and 307. Save this configuration.

Using LDAP

One may either create a LDIF file to add attributes either on :

  • Archive Device level (e.g.):

      version: 1
      dn: dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
      changetype: modify
      add: dcmFallbackWadoURIWebAppName
      dcmFallbackWadoURIWebAppName: DCM4CHEE-WADO_CLONE
              
      dn: dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
      changetype: modify
      add: dcmFallbackWadoURIHttpStatusCode
      dcmFallbackWadoURIHttpStatusCode: 301
    

OR

  • Archive AE level (e.g.):

      version: 1
      dn: dicomAETitle=DCM4CHEE,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
      changetype: modify
      add: dcmFallbackWadoURIWebAppName
      dcmFallbackWadoURIWebAppName: DCM4CHEE-WADO_CLONE
              
      dn: dicomAETitle=DCM4CHEE,dicomDeviceName=dcm4chee-arc,cn=Devices,cn=DICOM Configuration,dc=dcm4che,dc=org
      changetype: modify
      add: dcmFallbackWadoURIHttpStatusCode
      dcmFallbackWadoURIHttpStatusCode: 301
    

    and import it to the LDAP Server by using the ldapmodify command line utility.

    OR use the Add Attribute... and Add Value... function of Apache Directory Studio to add attributes on Device Level (e.g.: dicomDeviceName=dcm4chee-arc) or on Application Entity Level (e.g: dicomAETitle=DCM4CHEE) of the Archive Configuration.

One may refer to Archive Device or Archive Network AE to understand the description of attributes.

Testing

  • Select an object on archive 2. Note here in the WADO-URI service URL that host, port and AET are that of archive 1 whereas StudyIUID, SeriesIUID and SOPIUID are of the DICOM object on archive 2.
curl -v -L 'http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/wado?requestType=WADO&studyUID=1.2.840.113674.1118.54.200&seriesUID=1.2.840.113674.1118.54.180.300&objectUID=1.2.840.113674.950809132646154.100&contentType=image/jpeg&frameNumber=1' > image.jpeg        
  • As the object is not found in archive 1, the request is redirected to archive 2. This can be seen as follows :
* Expire in 0 ms for 6 (transfer 0x5632837115c0)
* Expire in 1 ms for 1 (transfer 0x5632837115c0)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 2 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x5632837115c0)
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /dcm4chee-arc/aets/DCM4CHEE/wado?requestType=WADO&studyUID=1.2.840.113674.1118.54.200&seriesUID=1.2.840.113674.1118.54.180.300&objectUID=1.2.840.113674.950809132646154.100&contentType=image/jpeg&frameNumber=1 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 303 See Other
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: origin, content-type, accept, authorization
< Access-Control-Allow-Credentials: true
< Location: http://localhost:8780/dcm4chee-arc/aets/DCM4CHEE_CLONE/wado?requestType=WADO&studyUID=1.2.840.113674.1118.54.200&seriesUID=1.2.840.113674.1118.54.180.300&objectUID=1.2.840.113674.950809132646154.100&contentType=image/jpeg&frameNumber=1
< Content-Length: 0
< Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, HEAD
< Date: Fri, 10 Apr 2020 14:02:14 GMT
< 
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Connection #0 to host localhost left intact
* Issue another request to this URL: 'http://localhost:8780/dcm4chee-arc/aets/DCM4CHEE_CLONE/wado?requestType=WADO&studyUID=1.2.840.113674.1118.54.200&seriesUID=1.2.840.113674.1118.54.180.300&objectUID=1.2.840.113674.950809132646154.100&contentType=image/jpeg&frameNumber=1'
* Found bundle for host localhost: 0x563283710a90 [can pipeline]
* Could pipeline, but not asked to!
* Expire in 1 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 6 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 1 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
* Expire in 0 ms for 1 (transfer 0x5632837115c0)
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x5632837115c0)
* Connected to localhost (127.0.0.1) port 8780 (#1)
> GET /dcm4chee-arc/aets/DCM4CHEE_CLONE/wado?requestType=WADO&studyUID=1.2.840.113674.1118.54.200&seriesUID=1.2.840.113674.1118.54.180.300&objectUID=1.2.840.113674.950809132646154.100&contentType=image/jpeg&frameNumber=1 HTTP/1.1
> Host: localhost:8780
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Access-Control-Allow-Headers: origin, content-type, accept, authorization
< Date: Fri, 10 Apr 2020 14:02:14 GMT
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< ETag: "1683502525"
< Last-Modified: Fri, 10 Apr 2020 13:47:14 GMT
< Access-Control-Allow-Credentials: true
< Transfer-Encoding: chunked
< Content-Type: image/jpeg
< Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, HEAD
< 
{ [16392 bytes data]
100 19169    0 19169    0     0   283k      0 --:--:-- --:--:-- --:--:--  283k
* Connection #1 to host localhost left intact

For redirection of WADO-URI requests using secured archives, ensure that either the two archives are connected to the same Keycloak or if they are connected to different Keycloaks then they shall be synchronized. Refer Cluster Keycloak with MariaDB and LDAP using Docker Standalone

⚠️ **GitHub.com Fallback** ⚠️