Skip to content

Add DICOM DIMSE-C services interface.#112

Open
x9517536607 wants to merge 1 commit into
DICOMcloud:dicomcloud-pacsfrom
x9517536607:master
Open

Add DICOM DIMSE-C services interface.#112
x9517536607 wants to merge 1 commit into
DICOMcloud:dicomcloud-pacsfrom
x9517536607:master

Conversation

@x9517536607

@x9517536607 x9517536607 commented Nov 25, 2020

Copy link
Copy Markdown
Contributor

This is my implementation for issue #111

I referred QueryRetrieve SCP and integrate DICOMcloud services as its backend.

  • Add DICOMcloud.Wado.PacsInterface project.
  • Add new table in DICOMcloud.mdf for c-move AEtitle mapping

You only easily configure the app:PacsStorageConnection and app:PacsDataArchieve same as App.config in DICOMcloud.Wado.WebApi.It will using same data.

@Zaid-Safadi

Copy link
Copy Markdown
Member

@x9517536607 thank you for this great effort and contribution , I love it!
It may take me a little bit to go over the code but if you can share more about the solution and what is the status of the current implementation, any outstanding items or recommendations?

@x9517536607

Copy link
Copy Markdown
Contributor Author

@Zaid-Safadi I referenced project from here and integrate with IObjectStoreService, IObjectArchieveQueryService and IObjectRetrieveService , you can check it in here.

I think it is almost done, but I don't create user interface to manage CMoveIPTable line 91 using in c-move command.

The main program logic is also in SCP.cs.

  • C-STORE -> #region IAsyncDicomCStoreProviderImp
  • C-GET -> #region IDicomCGetProviderImp
  • C-MOVE -> #region IDicomCMoveProviderImp
  • C-FIND -> #region IDicomCFindProviderImp
  • C-ECHO -> #region IAsyncDicomCEchoProviderImp

You can test it with Radiantviewer, Use Dicomweb upload image to DICOMcloud and use Radiantviewer to query/retrieve by DIMSE-C service interface with "QRSCP" as AE title.

Or you can send c-store command to store DICOM images to DICOMcloud and use web interface to view that images.

@Zaid-Safadi Zaid-Safadi changed the base branch from development to dicomcloud-pacs March 17, 2021 01:48

@sjswerdloff sjswerdloff left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really nice PR.
Unit tests would make a good addition (although that implies the need for the SCU functionality).
I would like to see this make it in to the default branch, or at least in to a branch in the parent repo (I've had to go clone from the fork to start investigating and experimenting, with the goal of constructing the proxy that was the original issue/request #111 )

@@ -0,0 +1,8 @@
CREATE TABLE [dbo].[CMoveIPTable]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an Application Entity descriptor table (although it doesn't list the supported Services).
It doesn't have to be specifically for C-MOVE

[Id] BIGINT IDENTITY (1, 1) NOT NULL,
[IP] NVARCHAR(50) NOT NULL,
[Port] INT NOT NULL,
[AEtitle] NVARCHAR(50) NOT NULL UNIQUE,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The limit on the size of an AE Title is 16 characters (VR of AE),
see https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html

using System.Text;
using System.Threading.Tasks;

namespace DICOMcloud.Wado.PacsInterface.PacsService

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While a PACS is probably the most likely target, the protocol implemented here is the DIMSE services.
It's the original protocol, of which WADO is an alternative.
So this is a DIMSEInterface and is offering DIMSEServer (apparently ready to offer C-STORE, C-FIND, and C-MOVE).
The namespace is OK as is, but you've accomplished a lot more than "just" PACS interface. It can be used for other purposes (this was in response to an Issue/Request for a proxy... this addresses a good chunk of what would be needed for such a proxy).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants