/// <summary>
        /// Called when [service stop].
        /// </summary>
        protected override void OnServiceStop()
        {
            if (_dataReceiver == null)
            {
                return;
            }

            _dataReceiver.DataReceived -= DataReceiver_DataReceived;
            _dataReceiver.StopServer();
            _dataReceiver.Dispose();
            _dataReceiver = null;
        }
        /// <summary>
        /// Disposes of the data receiver and sets the private value to null.
        /// </summary>
        private void DisposeDataReceiver()
        {
            if (_dataReceiver == null)
            {
                return;
            }

            _dataReceiver.DataReceived -= DataReceiver_DataReceived;

            _dataReceiver.Dispose();
            _dataReceiver = null;
        }
        /// <summary>
        /// Called when the service is started.
        /// </summary>
        protected override void OnServiceStart()
        {
            LogTrace(LogEntry.Create(AssociationStatus.ReceiveServiceStart));

            _receiveServiceConfig = _getReceiveServiceConfig();

            // Create a folder for saving data and the data saver object.
            var imageSaver = new ListenerDicomSaver(_receiveServiceConfig.RootDicomFolder);

            _dataReceiver = new ListenerDataReceiver(imageSaver);
            _dataReceiver.DataReceived += DataReceiver_DataReceived;

            // Start listening
            var serverStarted = _dataReceiver.StartServer(
                port: _receiveServiceConfig.GatewayDicomEndPoint.Port,
                getAcceptedTransferSyntaxes: () => _receiveServiceConfig.AcceptedSopClassesAndTransferSyntaxes,
                timeout: TimeSpan.FromSeconds(2));

            if (!serverStarted)
            {
                throw new ArgumentException("Failed to start the Dicom data receiver. The input configuration is not correct.", nameof(_receiveServiceConfig));
            }
        }