Comments (14)
Thanks for reporting the issue @lassoan. Are you sure the message is formatted correctly, i.e., does the payload of the response message has media type multipart/related
as specified by the standard?
from dicomweb-client.
I use https://github.com/dcmjs-org/dicomweb-server. I don't know if the implementation is correct.
I just had a quick look at documentation of Google's implementation (https://cloud.google.com/healthcare/docs/how-tos/dicomweb#retrieving_an_instance). Based on this I can imagine that if the client declares that it can accept multipart/related then the server can still decide to use application/dicom or multipart/related, but maybe Google's or my interpretation is not correct. Can you give a link to a DICOMweb specification that tells that the server must send instances as multipart/related?
@pieper can you comment on this?
from dicomweb-client.
Unfortunately, the latest version of Part 18 is really bad shape. Supplement 183 created havoc.
The /study/{studyUID}
, /series/{seriesUID}
, and /instance/{instanceUID}
resources represent collections of DICOM instances and the response message is supposed to have a payload with multipart/related
media type.
from dicomweb-client.
Closing this, since it is a issue with the origin server rather than the client.
from dicomweb-client.
@lassoan the 2018 version of the standard (prior to Supplement 183) is pretty explicit about the media type of response messages of WADO-RS - RetrieveInstance: http://dicom.nema.org/medical/dicom/2018e/output/chtml/part18/sect_6.5.3.2.html
from dicomweb-client.
@hackermd thanks for your help with this. It's a shame the standard is hard to parse on this topic. From the point of view of the dicomweb-client code I would argue we should relax this point in order to be compatible with some real world implementation features.
But as Andras points out, Google clearly offers the application/dicom
option on their instance endpoint and that's a common enough use case to consider supporting in the client.
If you are retrieving an instance, you can avoid having to parse multipart boundaries by using the Accept: application/dicom HTTP header.
Alternatively, can the client be used ask for wadu-uri to get the part-10 binary directly?
I agree that dicomweb-server should be fixed to be compliant, that in our control to do (I added this as an issue).
from dicomweb-client.
@pieper I agree that it's unfortunate that Part 18 is so hard to parse. I am actively working with WG 26 and 27 on improving the documentation. However, I am against providing workarounds for things that are clearly not compliant with the standard.
from dicomweb-client.
It could also make sense to change or extend the DICOM standard if it is unnecessarily complex to implement.
from dicomweb-client.
@lassoan There are reasons why /instances/{instanceUID}
requires content type multipart/related
. For example, different media types (e.g., application/octet-stream
or image/*
) are acceptable for this resource and not all of them can represent the resource in a single message part. Personally, I think that these media types should not be used for retrieval of an instance and that the standard should be changed. However, changing the standard requires a larger discussion with the DICOM standard committee. I encourage you to participate in WG 27 and propose changes to simplify the standard.
from dicomweb-client.
I just realized that the Azure DICOM server also got it wrong: https://github.com/microsoft/dicom-server/blob/master/docs/resources/conformance-statement.md#retrieve-an-instance
If most implementations got it "wrong", we should potentially re-consider.
from dicomweb-client.
@lassoan @pieper I created PR #43 to address this issue. Could you kindly take a look and let me know whether this works for you?
from dicomweb-client.
The client will currently still request the instance by specifying multipart/related; type="application/dicom"
as acceptable media type. However, it will parse the response payload if the server sends only a single part in media type with "application/dicom"
content type. We may have to add "application/dicom"
to the list of acceptable media types, but I would prefer not to do that unless we receive a 406, since I am unsure whether other implementations will handle this correctly. They should according to content negotiation rules, but who knows..
from dicomweb-client.
I think it looks good, but I agree with Niels's suggestion.
from dicomweb-client.
Included in version 0.51.0
from dicomweb-client.
Related Issues (20)
- Query regarding the body of STOW-RS request HOT 2
- Retrive metadata is QIDO-RS or WADO-RS? HOT 2
- Implementation of DICOMs3Client based on DICOMwebProtocol HOT 27
- ImportError: cannot import name 'Protocol' from 'typing' (python 3.7.11) HOT 5
- Orthanc Support HOT 3
- Outdated JPEG-LS media type for retrieval of frames
- Something broke for me going from 0.55.0 to 0.55.1 HOT 1
- Make pillow and numpy optional HOT 2
- Double trailing slash problem HOT 5
- Cannot find reference 'load_json_dataset' in 'api.py' HOT 1
- [Doc] Broken link in "Introduction" HOT 1
- Failing to import study using retrieve_study method
- noisy 'empty response' warning
- Retrieve_series_metadata Hangs Indefinitely Without Timeout
- Provide the results as Iterable of generators instead of lists HOT 2
- Allow to set force option of dcmread HOT 4
- Error in doc string?
- image/dicom-rle media type
- DICOMfileClient raises error for RLE Losssless files
- Success with partial content (status code 206)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dicomweb-client.