Пример #1
0
 protected internal override void PostResponse(DicomService service, DicomResponse response)
 {
     try
     {
         if (OnResponseReceived != null) OnResponseReceived(this, (DicomCEchoResponse)response);
     }
     catch
     {
     }
 }
Пример #2
0
 internal override void PostResponse(DicomService service, DicomResponse response)
 {
     try
     {
         if (OnResponseReceived != null)
         {
             OnResponseReceived(this, (DicomCMoveResponse)response);
         }
     }
     catch (System.Exception ex)
     {
         Log.LogManager.GetLogger("Dicom.Network").Error("", ex.Message, ex.Source, ex.StackTrace);
     }
 }
Пример #3
0
        public async Task SendingLargeFileUsingVeryShortResponseTimeoutAndSendingTakesTooLongShouldFail()
        {
            var port = Ports.GetNext();

            using (CreateServer <InMemoryDicomCStoreProvider>(port))
            {
                var client = CreateClient(port);

                client.Options.RequestTimeout = TimeSpan.FromSeconds(1);
                client.Options.MaxPDULength   = 16 * 1024;

                TimeSpan streamWriteTimeout = TimeSpan.FromMilliseconds(1500);

                client.NetworkManager = new ConfigurableNetworkManager(() => Thread.Sleep(streamWriteTimeout));

                DicomResponse response = null;
                DicomRequest.OnTimeoutEventArgs onTimeoutEventArgs = null;

                // Size = 5 192 KB, one PDU = 16 KB, so this will result in 325 PDUs
                // If stream timeout = 1500ms, then total time to send will be 325 * 1500 = 487.5 seconds
                var request = new DicomCStoreRequest(@"./Test Data/10200904.dcm")
                {
                    OnResponseReceived = (req, res) => response = res,
                    OnTimeout          = (sender, args) => onTimeoutEventArgs = args
                };

                RequestTimedOutEventArgs eventArgsFromDicomClientRequestTimedOut = null;
                client.RequestTimedOut += (sender, args) => eventArgsFromDicomClientRequestTimedOut = args;
                await client.AddRequestAsync(request).ConfigureAwait(false);

                var sendTask = client.SendAsync();
                var sendTimeoutCancellationTokenSource = new CancellationTokenSource();
                var sendTimeout = Task.Delay(TimeSpan.FromSeconds(10), sendTimeoutCancellationTokenSource.Token);

                var winner = await Task.WhenAny(sendTask, sendTimeout).ConfigureAwait(false);

                sendTimeoutCancellationTokenSource.Cancel();
                sendTimeoutCancellationTokenSource.Dispose();

                Assert.Same(winner, sendTask);
                Assert.Null(response);
                Assert.NotNull(onTimeoutEventArgs);
                Assert.NotNull(eventArgsFromDicomClientRequestTimedOut);
                Assert.Equal(request, eventArgsFromDicomClientRequestTimedOut.Request);
                Assert.Equal(client.Options.RequestTimeout, eventArgsFromDicomClientRequestTimedOut.Timeout);
            }
        }
Пример #4
0
        public override Task OnRequestCompletedAsync(DicomRequest request, DicomResponse response)
        {
            _pendingRequests.TryRemove(request.MessageID, out DicomRequest _);

            if (_pendingRequests.IsEmpty)
            {
                if (_dicomClient.QueuedRequests.IsEmpty)
                {
                    _allRequestsHaveCompletedTaskCompletionSource.TrySetResultAsynchronously(new AllRequestsHaveCompletedEvent());
                }
                else
                {
                    _sendMoreRequests.Set();
                }
            }

            return(CompletedTaskProvider.CompletedTask);
        }
Пример #5
0
        public async Task SendingLargeFileUsingVeryShortResponseTimeoutShouldSucceed()
        {
            var port = Ports.GetNext();

            using (CreateServer <InMemoryDicomCStoreProvider>(port))
            {
                var client = CreateClient(port);

                client.Options.RequestTimeout = TimeSpan.FromSeconds(2);
                client.Options.MaxPDULength   = 16 * 1024; // 16 KB

                TimeSpan streamWriteTimeout = TimeSpan.FromMilliseconds(10);

                client.NetworkManager = new ConfigurableNetworkManager(() => Thread.Sleep(streamWriteTimeout));

                DicomResponse response = null;

                // Size = 5 192 KB, one PDU = 16 KB, so this will result in 325 PDUs
                // If stream timeout = 50ms, then total time to send will be 3s 250ms
                var request = new DicomCStoreRequest(@"./Test Data/10200904.dcm")
                {
                    OnResponseReceived = (req, res) => response = res,
                };
                await client.AddRequestAsync(request).ConfigureAwait(false);

                var sendTask = client.SendAsync();
                var sendTimeoutCancellationTokenSource = new CancellationTokenSource();
                var sendTimeout = Task.Delay(TimeSpan.FromSeconds(10), sendTimeoutCancellationTokenSource.Token);

                var winner = await Task.WhenAny(sendTask, sendTimeout).ConfigureAwait(false);

                sendTimeoutCancellationTokenSource.Cancel();
                sendTimeoutCancellationTokenSource.Dispose();

                Assert.Equal(winner, sendTask);

                Assert.NotNull(response);

                Assert.Equal(DicomStatus.Success, response.Status);
            }
        }
Пример #6
0
        public async Task SendingLargeFileUsingVeryShortResponseTimeoutShouldSucceed()
        {
            var port = Ports.GetNext();

            using (CreateServer <InMemoryDicomCStoreProvider>(port))
            {
                var streamWriteTimeout = TimeSpan.FromMilliseconds(10);
                var clientFactory      = CreateClientFactory(new ConfigurableNetworkManager(() => Thread.Sleep(streamWriteTimeout)));
                var client             = clientFactory.Create("127.0.0.1", port, false, "SCU", "ANY-SCP");
                client.Logger = _logger.IncludePrefix(typeof(DicomClient).Name).WithMinimumLevel(LogLevel.Debug);
                client.ServiceOptions.RequestTimeout = TimeSpan.FromSeconds(2);
                client.ServiceOptions.MaxPDULength   = 16 * 1024; // 16 KB

                DicomResponse response = null;

                // Size = 5 192 KB, one PDU = 16 KB, so this will result in 325 PDUs
                // If stream timeout = 50ms, then total time to send will be 3s 250ms
                var request = new DicomCStoreRequest(TestData.Resolve("10200904.dcm"))
                {
                    OnResponseReceived = (req, res) => response = res,
                };
                await client.AddRequestAsync(request).ConfigureAwait(false);

                var sendTask = client.SendAsync();
                var sendTimeoutCancellationTokenSource = new CancellationTokenSource();
                var sendTimeout = Task.Delay(TimeSpan.FromSeconds(10), sendTimeoutCancellationTokenSource.Token);

                var winner = await Task.WhenAny(sendTask, sendTimeout).ConfigureAwait(false);

                sendTimeoutCancellationTokenSource.Cancel();
                sendTimeoutCancellationTokenSource.Dispose();

                Assert.Equal(winner, sendTask);

                Assert.NotNull(response);

                Assert.Equal(DicomStatus.Success, response.Status);
            }
        }
Пример #7
0
 public Task OnRequestCompletedAsync(DicomRequest request, DicomResponse response)
 {
     return(CompletedTaskProvider.CompletedTask);
 }
 public abstract Task OnRequestCompletedAsync(DicomRequest request, DicomResponse response);
        public override Task OnRequestCompletedAsync(DicomRequest request, DicomResponse response)
        {
            RemoveRequestFromPendingList(request);

            return(CompletedTaskProvider.CompletedTask);
        }
Пример #10
0
 internal Task OnRequestCompletedAsync(DicomRequest request, DicomResponse response)
 => State.OnRequestCompletedAsync(request, response);
Пример #11
0
 public Task OnRequestCompletedAsync(DicomRequest request, DicomResponse response) => Task.CompletedTask;
Пример #12
0
 public Task OnRequestCompletedAsync(DicomRequest request, DicomResponse response)
 {
     return(DicomClient.OnRequestCompletedAsync(request, response));
 }