实例介绍
DICOMcloud是一个独立的DICOMweb服务器,通过RESTful方式实现了DICOMweb/WADO服务,包括查询(QIDO-RS)、检索(WADO-RS)、存储(STOW-RS)和Web访问DICOM对象(WADO-URI)等功能。此外,服务器还实现了一些非DICOM标准的RESTful服务,如删除DICOM实例/图像(DELOW-RS)和与OHIF查看器的集成服务(返回OHIF格式化的研究信息)。
DICOMcloud服务器能够与任何DICOMweb客户端通过当前实现的功能(qido-rs、wado-uri、wado-rs和stow-rs)进行交互。该项目使用C# .NET Framework 4.5.2编写,可在Visual Studio 2017中构建,并可在Windows机器或Azure WebApp上运行。项目利用MS SQL数据库查询DICOM信息,并将DICOM数据集保存到文件系统或Azure Blob存储中。
要运行代码,您需要Visual Studio 2017/2015。打开根目录上的解决方案文件DICOMcloud.sln,如果"DICOMcloud.Wado.WebApi"项目未被选为启动项目,右键点击选择"设置为启动项目",然后按F5运行解决方案。项目运行后,DICOMweb服务器将在https://localhost:44301/上运行,可以通过更改web.config中的设置来调整存储连接和数据存档。
DICOMcloud项目利用开源的fo-dicom DICOM库进行DICOM数据集的操作,如读写元素、压缩/解压DICOM图像、匿名化功能等。
【实例截图】
【核心代码】
文件清单
└── DICOMcloud-0eb7773ba36a9a21dc079ac5c14005b257a3167b
├── CHANGELOG.MD
├── DICOMcloud
│ ├── DICOMcloud
│ │ ├── DCloudNotFoundException.cs
│ │ ├── DICOMcloudException.cs
│ │ ├── DatasetExtensions.cs
│ │ ├── DicomConstants.cs
│ │ ├── DicomConverterBase.cs
│ │ ├── DicomObjectId
│ │ │ ├── DicomObjectIdFactory.cs
│ │ │ ├── IObject.cs
│ │ │ ├── ISeriesID.cs
│ │ │ ├── IStudyID.cs
│ │ │ └── ObjectID.cs
│ │ ├── DuplicateInstanceException.cs
│ │ ├── IDicomConverter.cs
│ │ ├── JsonDicomConverter.cs
│ │ ├── TraceLogger.cs
│ │ ├── UncompressedPixelData.cs
│ │ ├── UncompressedPixelDataConverter.cs
│ │ ├── XmlDicomConverter.cs
│ │ └── XmlStreamDicomConverter.cs
│ ├── DICOMcloud.csproj
│ ├── DataAccess
│ │ ├── DicomDataParameter
│ │ │ ├── DicomDataParameter.cs
│ │ │ ├── DicomDataParameterFactory.cs
│ │ │ ├── IDicomDataParameter.cs
│ │ │ ├── IDicomDataParameterFactory.cs
│ │ │ ├── PersonNameData.cs
│ │ │ └── PersonNameParts.cs
│ │ ├── IObjectStorageDataAccess.cs
│ │ ├── Matching
│ │ │ ├── Condition.cs
│ │ │ ├── ConditionFactory.cs
│ │ │ ├── IMatchingCondition.cs
│ │ │ └── IQueryInfo.cs
│ │ ├── ObjectQueryLevel.cs
│ │ ├── PagedResult.cs
│ │ ├── QueryOptions.cs
│ │ └── StoreData.cs
│ ├── Extensions
│ │ └── CommonExtensions.cs
│ ├── IO
│ │ ├── File
│ │ │ ├── FileKeyProvider.cs
│ │ │ ├── FileStorageService.cs
│ │ │ ├── HashedFileKeyProvider.cs
│ │ │ ├── LocalStorageContainer.cs
│ │ │ └── LocalStorageLocation.cs
│ │ ├── IKeyProvider.cs
│ │ ├── ILocationProvider.cs
│ │ ├── IMediaKey.cs
│ │ ├── IPreSignedUrlStorageLocation.cs
│ │ ├── IStorageContainer.cs
│ │ ├── IStorageLocation.cs
│ │ ├── IStorageService.cs
│ │ ├── Memory
│ │ │ ├── MemoryStorageLocation.cs
│ │ │ └── MemoryStorageService.cs
│ │ ├── ObservableStorageLocation
│ │ │ ├── LocationDeletedMessage.cs
│ │ │ ├── LocationDownloadedMessage.cs
│ │ │ ├── LocationMessage.cs
│ │ │ ├── LocationUplodedMessage.cs
│ │ │ └── ObservableStorageLocation.cs
│ │ └── StorageService.cs
│ ├── Media
│ │ ├── DicomMediaId.cs
│ │ ├── DicomMediaProperties.cs
│ │ ├── Factories
│ │ │ ├── DicomMediaIdFactory.cs
│ │ │ ├── DicomMediaReaderFactory.cs
│ │ │ ├── DicomMediaWriterFactory.cs
│ │ │ ├── IDicomMediaIdFactory.cs
│ │ │ ├── IDicomMediaReaderFactory.cs
│ │ │ └── IDicomMediaWriterFactory.cs
│ │ ├── MimeMediaTypes.cs
│ │ ├── Readers
│ │ │ └── IDicomMediaReader.cs
│ │ └── Writers
│ │ ├── DicomMediaWriter.cs
│ │ ├── DicomMediaWriterBase.cs
│ │ ├── DicomMediaWriterParameters.cs
│ │ ├── IDicomMediaWriter.cs
│ │ ├── IMediaWriter.cs
│ │ ├── JpegMediaWriter.cs
│ │ ├── JsonMediaWriter.cs
│ │ ├── NativeMediaWriter.cs
│ │ ├── UncompressedMediaWriter.cs
│ │ └── XmlMediaWriter.cs
│ ├── Messaging
│ │ ├── IMessageSender.cs
│ │ ├── IPublisherSubscriber.cs
│ │ ├── ITransportMessage.cs
│ │ ├── PublisherSubscriber.cs
│ │ ├── PublisherSubscriberFactory.cs
│ │ └── TransportMessage.cs
│ ├── Pacs
│ │ ├── Commands
│ │ │ ├── DCloudCommand.cs
│ │ │ ├── DCloudCommandFactory.cs
│ │ │ ├── DeleteCommand.cs
│ │ │ ├── DeleteCommandData.cs
│ │ │ ├── DicomStoreSuccessEventArgs.cs
│ │ │ ├── IDCloudCommand.cs
│ │ │ ├── IDCloudCommandFactory.cs
│ │ │ ├── IDCloudCommandResult.cs
│ │ │ ├── IDeleteCommand.cs
│ │ │ ├── IStoreCommand.cs
│ │ │ ├── StoreCommand.cs
│ │ │ └── StoreCommandData.cs
│ │ ├── Query
│ │ │ ├── DicomQueryServiceBase.cs
│ │ │ ├── IDicomQueryService.cs
│ │ │ ├── IObjectArchieveQueryService.cs
│ │ │ └── ObjectArchieveQueryService.cs
│ │ ├── Retrieve
│ │ │ ├── IObjectRetrieveService.cs
│ │ │ ├── ObjectRetrieveResult.cs
│ │ │ └── ObjectRetrieveService.cs
│ │ └── Storage
│ │ ├── IObjectStoreService.cs
│ │ └── ObjectStoreService.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── app.config
│ └── packages.config
├── DICOMcloud.Azure
│ ├── DICOMcloud.Azure.csproj
│ ├── Messaging
│ │ └── AzureMessageSender.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Storage
│ │ ├── AzureContainer.cs
│ │ ├── AzureKeyProvider.cs
│ │ ├── AzureLocation.cs
│ │ └── AzureStorageService .cs
│ ├── app.config
│ └── packages.config
├── DICOMcloud.DataAccess.Database
│ ├── Commands
│ │ ├── DicomDsQueryCommand.cs
│ │ ├── ExecuteNonQueryCommand.cs
│ │ ├── IDataAdapterCommand.cs
│ │ ├── ResultSetQueryCommand.cs
│ │ ├── ScalarCommand.cs
│ │ └── SingleResultQueryCommand.cs
│ ├── DICOMcloud.DataAccess.Database.csproj
│ ├── DatabaseSchema.xml
│ ├── IConnectionStringProvider.cs
│ ├── IDatabaseFactory.cs
│ ├── ISortingStrategy.cs
│ ├── ISortingStrategyFactory.cs
│ ├── ObjectArchieveDataAccess.cs
│ ├── ObjectArchieveDataAdapter.cs
│ ├── ObjectArchieveSortingStrategy.cs
│ ├── ObjectArchieveStorageBuilder.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── QueryBuilder
│ │ ├── JoinInfo.cs
│ │ ├── MatchBuilder.cs
│ │ ├── QueryBuilder.cs
│ │ ├── SqlJoinBuilder.cs
│ │ └── SqlQueries.cs
│ ├── QueryResponseBuilder
│ │ ├── ContextData.cs
│ │ ├── ContextDataSets.cs
│ │ ├── IQueryResponseBuilder.cs
│ │ └── QueryResponseBuilder.cs
│ ├── Schema
│ │ ├── ColumnInfo.cs
│ │ ├── DBSchemaProvider.cs
│ │ ├── DbSchemaSource.cs
│ │ ├── StorageDBSchemaProvider.cs
│ │ └── TableKey.cs
│ ├── SortingStrategyFactory.cs
│ ├── SqlConstants.cs
│ ├── SqlDatabaseFactory.cs
│ ├── SqlDeleteStatments.DeleteInstance.cs
│ ├── SqlDeleteStatments.DeleteSeries.cs
│ ├── SqlDeleteStatments.DeleteStudy.cs
│ ├── SqlDeleteStatments.cs
│ ├── SqlInsertStatments.cs
│ ├── app.config
│ └── packages.config
├── DICOMcloud.SqlServerDatabase
│ ├── DICOMcloud.SqlServerDatabase.refactorlog
│ ├── DICOMcloud.SqlServerDatabase.sqlproj
│ └── dbo
│ ├── Scripts
│ │ └── Script.PostDeployment1.sql
│ └── Tables
│ ├── DICOMcloudDbVersion.sql
│ ├── ObjectInstance.sql
│ ├── Patient.sql
│ ├── RequestAttributeSequence.sql
│ ├── Series.sql
│ └── Study.sql
├── DICOMcloud.Wado
│ ├── DICOMcloud.Wado.csproj
│ ├── MimeHandler
│ │ ├── IMimeResponseHandler.cs
│ │ ├── IWadoRsMimeResponseCreator.cs
│ │ ├── ImageObjectHandler.cs
│ │ ├── ObjectHandlerBase.cs
│ │ ├── OtherObjectsHandler.cs
│ │ ├── TextObjectHandler.cs
│ │ └── WadoResponseProcessorFactory.cs
│ ├── ModelBinders
│ │ ├── DeleteRsRequestModelConverter.cs
│ │ ├── QidoRequestModelBinder.cs
│ │ ├── QidoRequestModelConverter.cs
│ │ ├── RsDeleteRequestModelBinder.cs
│ │ ├── RsFrameRequestModelBinder.cs
│ │ ├── RsObjectRequestModelBinder.cs
│ │ ├── RsRequestModelBinder.cs
│ │ ├── RsRequestModelConverter.cs
│ │ ├── RsSeriesRequestModelBinder.cs
│ │ ├── RsStudiesRequestModelBinder.cs
│ │ ├── UriRequestModelBinder.cs
│ │ └── UriRequestModelConverter.cs
│ ├── Models
│ │ ├── DicomWebServerSettings.cs
│ │ ├── IQidoQuery.cs
│ │ ├── IQidoRequestModel.cs
│ │ ├── IWadoRSRequest.cs
│ │ ├── IWadoRequest.cs
│ │ ├── IWadoRequestHeader.cs
│ │ ├── IWadoResponse.cs
│ │ ├── OHIFViewerModel.cs
│ │ ├── QidoQuery.cs
│ │ ├── QidoRequestModel.cs
│ │ ├── WadoRSRequest.cs
│ │ ├── WadoRequest.cs
│ │ ├── WadoResponse.cs
│ │ ├── WebDeleteRequest.cs
│ │ └── WebStoreRequest.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Services
│ │ ├── IOhifService.cs
│ │ ├── IQidoRsService.cs
│ │ ├── IWadoRsSerivce.cs
│ │ ├── IWadoUriService.cs
│ │ ├── IWebObjectStoreService.cs
│ │ ├── LinkHeaderBuilder.cs
│ │ ├── MultipartResponseHelper.cs
│ │ ├── OhifService.cs
│ │ ├── QidoRsService.cs
│ │ ├── WadoRsSerivce.cs
│ │ ├── WadoUriService.cs
│ │ └── WebObjectStoreService.cs
│ ├── Types
│ │ ├── DefaultDicomQueryElements.cs
│ │ ├── DefaultMediaTransferSyntax.cs
│ │ ├── WebStoreDatasetMessage.cs
│ │ ├── WebStoreDatasetProcessedMessage.cs
│ │ ├── WebStoreDatasetProcessingFailureMessage.cs
│ │ └── WebStoreDatasetProcessingMessage.cs
│ ├── WadoResponse
│ │ ├── IRetrieveUrlProvider.cs
│ │ ├── RetrieveUrlProvider.cs
│ │ └── WadoStoreResponse.cs
│ ├── app.config
│ └── packages.config
├── DICOMcloud.Wado.WebApi
│ ├── App_Start
│ │ ├── BundleConfig.cs
│ │ ├── ConnectionStringProvider.cs
│ │ ├── DICOMcloudBuilder.cs
│ │ ├── FilterConfig.cs
│ │ ├── RouteConfig.cs
│ │ └── WebApiConfig.cs
│ ├── ApplicationInsights.config
│ ├── Content
│ │ └── Site.css
│ ├── Controllers
│ │ ├── FramesController.cs
│ │ ├── HomeController.cs
│ │ ├── InstanceController.cs
│ │ ├── MetadataController.cs
│ │ ├── OHIFViewerController.cs
│ │ ├── SeriesController.cs
│ │ ├── StudiesController.cs
│ │ ├── SwaggerController.cs
│ │ └── WadoUriController.cs
│ ├── DICOMcloud.Wado.WebApi.csproj
│ ├── Exceptions
│ │ ├── DICOMcloudExceptionHandler.cs
│ │ └── DICOMcloudExceptionLogger.cs
│ ├── Global.asax
│ ├── Global.asax.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Service References
│ │ ├── Application Insights
│ │ │ └── ConnectedService.json
│ │ └── AzureAD
│ │ └── ConnectedService.json
│ ├── Types
│ │ └── CorsPolicyFactory.cs
│ ├── Views
│ │ └── Web.config
│ ├── Web.Debug.config
│ ├── Web.Release.config
│ ├── Web.config
│ ├── favicon.ico
│ ├── logo.png
│ ├── packages.config
│ └── swagger
│ ├── css
│ │ ├── print.css
│ │ ├── reset.css
│ │ ├── screen.css
│ │ ├── style.css
│ │ └── typography.css
│ ├── fonts
│ │ ├── DroidSans-Bold.ttf
│ │ └── DroidSans.ttf
│ ├── images
│ │ ├── collapse.gif
│ │ ├── expand.gif
│ │ ├── explorer_icons.png
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon.ico
│ │ ├── logo_small.png
│ │ ├── pet_store_api.png
│ │ ├── throbber.gif
│ │ └── wordnik_api.png
│ ├── index.html
│ ├── lang
│ │ ├── ca.js
│ │ ├── el.js
│ │ ├── en.js
│ │ ├── es.js
│ │ ├── fr.js
│ │ ├── geo.js
│ │ ├── it.js
│ │ ├── ja.js
│ │ ├── ko-kr.js
│ │ ├── pl.js
│ │ ├── pt.js
│ │ ├── ru.js
│ │ ├── tr.js
│ │ ├── translator.js
│ │ └── zh-cn.js
│ ├── lib
│ │ ├── backbone-min.js
│ │ ├── es5-shim.js
│ │ ├── handlebars-4.0.5.js
│ │ ├── highlight.9.1.0.pack.js
│ │ ├── highlight.9.1.0.pack_extended.js
│ │ ├── jquery-1.8.0.min.js
│ │ ├── jquery.ba-bbq.min.js
│ │ ├── jquery.slideto.min.js
│ │ ├── jquery.wiggle.min.js
│ │ ├── js-yaml.min.js
│ │ ├── jsoneditor.min.js
│ │ ├── lodash.min.js
│ │ ├── marked.js
│ │ ├── object-assign-pollyfill.js
│ │ ├── sanitize-html.min.js
│ │ └── swagger-oauth.js
│ ├── o2c.html
│ ├── swagger-restful.json
│ ├── swagger-ui.js
│ ├── swagger-ui.min.js
│ ├── swagger.json
│ └── swagger.yaml
├── DICOMcloud.sln
├── LICENSE
├── License.txt
├── README.md
├── Resources
│ ├── Build
│ │ ├── DICOMcloud.Wado.WebApi
│ │ │ ├── DICOMcloud.Wado.WebApi.csproj
│ │ │ ├── DICOMcloud.Wado.WebApi.nuspec
│ │ │ ├── DICOMcloud.Wado.WebApi.sln
│ │ │ ├── Properties
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── Readme.txt
│ │ │ ├── app.config
│ │ │ ├── packages.config
│ │ │ └── web.config.install.xdt
│ │ ├── DICOMcloud.bat
│ │ ├── Default.nuspec
│ │ ├── NuGet.exe
│ │ └── copyAssembly.bat
│ ├── Database
│ │ ├── DICOMcloud.ldf
│ │ └── DICOMcloud.mdf
│ ├── Docs
│ │ ├── DICOMcloud-Arch..png
│ │ └── DICOMcloud-Arch..pptx
│ ├── SampleImages
│ │ ├── 1.dcm
│ │ ├── 2.dcm
│ │ └── 3-International.dcm
│ ├── Version
│ │ ├── AssemblyInfo.Version.cs
│ │ └── AssemblyInfo.Version.tt
│ └── logo
│ ├── logo.png
│ └── logo.xcf
├── UnitTests
│ └── DICOMcloud.Dicom.UnitTest
│ ├── ArchieveDataAccessTests.cs
│ ├── DICOMcloud.UnitTest.csproj
│ ├── DICOMwebServicesTests.cs
│ ├── DicomDatasetConvertersTests.cs
│ ├── Helpers
│ │ ├── DataAccessHelpers.cs
│ │ ├── DicomHelpers.cs
│ │ └── MockRetrieveUrlProvider.cs
│ ├── MatchingConditionTests.cs
│ ├── ObjectStoreServiceTests.cs
│ ├── PaginationSearchTest.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── app.config
│ └── packages.config
├── azuredeploy.json
└── dist
├── DICOMcloud.Azure.dll
├── DICOMcloud.DataAccess.Database.dll
├── DICOMcloud.Wado.dll
└── DICOMcloud.dll
76 directories, 357 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论