Redirect WADO URI Requests - dcm4che/dcm4chee-arc-light GitHub Wiki
Enable redirection of WADO URI requests for unavailable objects in archive to an external archive.
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.
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.
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.
- 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