SimpleQIDOService is a very simple implementation of the DICOM QIDO-RS standard.
On startup, it reads all DICOM files in the C:\QIDO directory and creates an in memory
database of all studies, series and instances to respond to QIDO queries from. The project
is written in C# with Visual Studio 2013 Update 2, ASP.NET MVC 5 WebApi and the fo-dicom
open source library. It also uses the Microsoft.AspNet.WebApi.Cors library to support
Cross Origin Resource Sharing (CORS)
so web browsers can query it without going through a proxy.
This service should work with any QIDO-RS compliant client:
- The [cornerstoneQIDORSWorklist] (https://github.com/chafey/cornerstoneQIDORSWorklist). Enter the URL this server is listening on in QIDO-RS Root URL:
- cURL
- Any rest client test application e.g. "Advanced REST client" available from the Chrome appstore
- Changes to C:\QIDO require a startup to be recognized
- The more files you have in C:\QIDO, the longer it takes to startup
- The pixel data is currently cached so more memory is used that necessary. This will be fixed once I figure out how to tell fo-dicom to ignore pixel data or free it
- All non-relational queries:
- Search for Studies: /studies[?query]
- Search for Series: /studies/{studyInstanceUid}/series[?query]
- Search for Instances: /studies/{studyInstanceUid}/series/{seriesInstanceUid}/instances[?query]
- Search for Instances: /studies/{studyInstanceUid}/instances[?query]
- Support for application/json results
- Support for includefield={attributeId}
- Support for {attributeId} as {dicomKeyword} or {dicomTag}
- Support for limit and offset
- Support for CORS (cross origin resource sharing)
- Relational queries
- Search for Series: /series[?query]
- Search for Instances: /instances[?query]
- multipart/related; type=application/dicom+xml responses
- fuzzymatching
- Matches on sequences (e.g. RequestAttributeSequence)
- Returning sequences attribuets in responses (e.g. RequestAttributeSequence)
- includefield=all
- wildcard matching for the following study attributes
- StudyDate
- StudyTIme
- Modalities in study
- Instance Availability
- wildcard matching for the following series attributes
- Modality
- Series Number
- Performed Procedure Step Start Date
- Performed Procedure Step Start Time
- Instance Availability
- wildcard matching for the following instance attributes
- Instance Number
- Instance Availability
Why don't you support application/dicom+xml responses?
I am focused on building browser based applications and application/json responses are easier to work with in JavaScript. If you want to add this, please contact me to discuss.
Why don't you support relational queries?
I have no current need for this. If you want to add this, please contact me to discuss.
Why don't you support wildcard matching for all attributes?
I only implemented wildcard matching for the attributes I might actually use it on. Some of the attributes didn't seem to make sense to do wildcard matching on - for example, series number or modality. If someone can explain to me why wildcard matching is important on these, I might add it.
Why don't you support includefield=all?
I don't currently have a need for this. It should be straightforward to add this though as I added some plumbing for it already. Contact me to discuss.
Why don't you support sequences?
I have no need for this right now. If you want to add this, please submit a pull request
Why don't you support fuzzymatching?
I don't know what this is and the current matching functionality meets my immediate needs. If you want to add this, please contact me to discuss.
Copyright 2014 Chris Hafey [email protected]