Prerequisites
Operating system: Windows 10 (1909+), Windows 11, Windows Server 2019 or 2022 (recommended for production).
Runtime: .NET 9.0 Runtime (required).
Hardware:
| Minimum | Recommended | |
|---|---|---|
| CPU | 2 cores, 2.4 GHz | 4+ cores, 3.0 GHz |
| RAM | 4 GB | 8–16 GB (32 GB+ high-throughput) |
| Storage | 100 MB app + DICOM files | SSD, 1 TB+, RAID 1/5/10 |
| Network | 100 Mbps | 1 Gbps dedicated |
Method 1 — Standalone
:: 1. Extract files to installation directory (e.g. C:\DicomProxy\)
:: 2. Verify .NET 9.0
dotnet --info
:: 3. Copy and edit configuration
copy appsettings.example.json appsettings.json
:: 4. Test run
DicomProxyRTWindows.exe
Method 2 — Windows Service
:: Run as Administrator
sc create "DICOM Proxy" binPath="C:\DicomProxy\DicomProxyRTWindows.exe" start=auto
sc description "DICOM Proxy" "Advanced DICOM Proxy/Router/PACS Service"
:: Auto-restart on failure
sc failure "DICOM Proxy" reset=86400 actions=restart/5000/restart/5000/restart/5000
sc start "DICOM Proxy"
sc query "DICOM Proxy"
Initial configuration
appsettings.json
{
"DicomPort": 11112,
"HttpPort": 8080,
"HttpsPort": 8443,
"StoragePath": "C:\\DicomStorage",
"DatabasePath": "C:\\DicomStorage\\dicom.db",
"LogLevel": "Info",
"MaxStorageSizeGB": 1000,
"CleanupIntervalHours": 24,
"ThisModality": {
"AE_Title": "DICOMPROXY",
"Port": 11112,
"IPAddress": "0.0.0.0",
"MaxConnections": 50
},
"Security": {
"EnableTLS": false,
"CertificatePath": "",
"CertificatePassword": "",
"RequireAuthentication": false
}
}
servers.json
{
"servers": [
{
"id": "pacs1",
"name": "Main PACS Server",
"ae_title": "MAINPACS",
"hostname": "192.168.1.100",
"port": 11112,
"enabled": true,
"max_connections": 10,
"timeout_seconds": 30,
"priority": 1,
"supported_services": ["C-STORE", "C-FIND", "C-GET", "C-MOVE", "C-ECHO"]
}
]
}
Storage structure (auto-created)
C:\DicomStorage\
├── studies\
│ └── [StudyInstanceUID]\
│ └── [SeriesInstanceUID]\
│ └── [SOPInstanceUID].dcm
├── temp\
├── logs\
└── config\
├── dicom.db
└── cache\
Network / firewall
Ports
| Service | Default port | Protocol |
|---|---|---|
| DICOM SCP | 11112 | TCP |
| HTTP API | 8080 | TCP |
| HTTPS API | 8443 | TCP |
| DICOM TLS | 11113 | TCP |
Firewall rules
:: Inbound
netsh advfirewall firewall add rule name="DICOM Proxy - DICOM" dir=in action=allow protocol=TCP localport=11112
netsh advfirewall firewall add rule name="DICOM Proxy - HTTP" dir=in action=allow protocol=TCP localport=8080
netsh advfirewall firewall add rule name="DICOM Proxy - HTTPS" dir=in action=allow protocol=TCP localport=8443
:: Outbound
netsh advfirewall firewall add rule name="DICOM Proxy - Out DICOM" dir=out action=allow protocol=TCP remoteport=11112
netsh advfirewall firewall add rule name="DICOM Proxy - Out HTTP" dir=out action=allow protocol=TCP remoteport=80,443
SSL/TLS
Generate a self-signed certificate (development)
$cert = New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"
$certPath = "C:\DicomProxy\certificate.pfx"
Export-PfxCertificate -Cert $cert -FilePath $certPath `
-Password (ConvertTo-SecureString "YourSecurePassword" -AsPlainText -Force)
Enable TLS in appsettings.json
{
"Security": {
"EnableTLS": true,
"CertificatePath": "certificate.pfx",
"CertificatePassword": "YourSecurePassword",
"RequireAuthentication": true
}
}
Place the DICOM TLS certificate at: C:\DicomProxy\dicomtls.pfx
Verification
# DICOM echo
echoscu localhost 11112 -aet TESTCLIENT -aec DICOMPROXY
# HTTP API
curl http://localhost:8080/api/studies
curl http://localhost:8080/openapi.json
# QIDO-RS
curl "http://localhost:8080/wado/studies?StudyDate=20240101-20241231"
# Storage
dir C:\DicomStorage\studies
Troubleshooting
| Problem | Diagnosis | Fix |
|---|---|---|
| Port in use | netstat -an | findstr :11112 |
taskkill /f /pid [PID] |
| Permission denied | — | icacls "C:\DicomProxy" /grant "NT SERVICE\DICOM Proxy":(OI)(CI)F |
| .NET not found | dotnet --info |
Reinstall .NET 9.0 Runtime |
| Service won't start | Check Event Viewer → Windows Logs → Application | Look for DICOM Proxy entries |
Log file location: C:\DicomStorage\logs\dicom-proxy-[date].log
Key log messages:
Started DICOM server on port— DICOM OKHTTP server started on— HTTP API OKLicense validation successful— licence OKFailed to connect to server— network issue
Next: Configuration Reference