A lightweight DICOMweb server implementation built with .NET and C# from scratch. This server implements the minimal set of DICOMweb endpoints required for OHIF Viewer to function correctly.
This server implements the essential DICOMweb endpoints needed by OHIF Viewer:
GET /dicomweb/studies- Retrieve studiesGET /dicomweb/studies/{studyUid}/series- Retrieve series for a specific studyGET /dicomweb/studies/{studyUid}/series/{seriesUid}/metadata- Retrieve metadata for a specific series
GET /dicomweb/studies/{studyUid}/series/{seriesUid}/instances/{instanceUid}/rendered- Retrieve rendered instanceGET /dicomweb/studies/{studyUid}/series/{seriesUid}/instances/{instanceUid}/thumbnail- Retrieve thumbnail for instanceGET /dicomweb/studies/{studyUid}/series/{seriesUid}/instances/{instanceUid}/frames/{frameNo}- Retrieve specific frame from instance
- .NET 7.0 or higher
- DICOM files stored in a compatible format
- OHIF Viewer (for testing)
Create a local-server.js file with the following configuration:
/** @type {AppTypes.Config} */
window.config = {
name: "config/local-server.js",
routerBasename: null,
extensions: [],
modes: [],
customizationService: {},
showStudyList: true,
maxNumberOfWebWorkers: 3,
showWarningMessageForCrossOrigin: true,
showCPUFallbackMessage: true,
showLoadingIndicator: true,
experimentalStudyBrowserSort: false,
strictZSpacingForVolumeViewport: true,
groupEnabledModesFirst: true,
allowMultiSelectExport: false,
defaultDataSourceName: "local5152",
dataSources: [
{
namespace: "@ohif/extension-default.dataSourcesModule.dicomweb",
sourceName: "local5152",
configuration: {
friendlyName: "Local .NET DICOMWeb Server",
name: "DotNetDICOMWeb",
wadoUriRoot: "http://localhost:5152/dicomweb",
qidoRoot: "http://localhost:5152/dicomweb",
wadoRoot: "http://localhost:5152/dicomweb",
qidoSupportsIncludeField: true,
supportsStow: true,
supportsReject: false,
dicomUploadEnabled: true,
imageRendering: "wadors",
thumbnailRendering: "wadors",
enableStudyLazyLoad: true,
supportsFuzzyMatching: false,
supportsWildcard: true,
staticWado: false,
omitQuotationForMultipartRequest: true,
singlepart: "bulkdata,video,pdf",
bulkDataURI: {
enabled: true,
relativeResolution: "studies",
},
},
},
{
namespace: "@ohif/extension-default.dataSourcesModule.dicomjson",
sourceName: "dicomjson",
configuration: {
friendlyName: "dicom json",
name: "json",
},
},
{
namespace: "@ohif/extension-default.dataSourcesModule.dicomlocal",
sourceName: "dicomlocal",
configuration: {
friendlyName: "dicom local",
},
},
],
httpErrorHandler: (error) => {
console.warn("HTTP Error:", error.status, error.statusText);
console.warn("Error details:", error);
},
};- Clone the repository
- Build the project:
dotnet build
- Run the server:
dotnet run
- Start the DICOMweb server
- Configure OHIF Viewer to use this server using the provided
local-server.jsconfiguration - Access OHIF Viewer and browse your DICOM studies
GET /dicomweb/studies
Returns a list of available studies.
GET /dicomweb/studies/{studyUid}/series
Returns a list of series for the specified study.
GET /dicomweb/studies/{studyUid}/series/{seriesUid}/metadata
Returns metadata for the specified series.
GET /dicomweb/studies/{studyUid}/series/{seriesUid}/instances/{instanceUid}/rendered
Returns a rendered version of the specified instance.
GET /dicomweb/studies/{studyUid}/series/{seriesUid}/instances/{instanceUid}/thumbnail
Returns a thumbnail image for the specified instance.
GET /dicomweb/studies/{studyUid}/series/{seriesUid}/instances/{instanceUid}/frames/{frameNo}
Returns the specified frame from a multi-frame instance.
- This implementation only includes endpoints required by OHIF Viewer
- Not all DICOMweb protocol endpoints are implemented
- Designed specifically for integration with OHIF Viewer
For issues related to OHIF Viewer integration, ensure your configuration matches the provided local-server.js example.