Exemple #1
0
        public async IAsyncEnumerable <DicomFile> Retrieve(
            string studyInstanceUid,
            string seriesInstanceUid,
            params DicomTransferSyntax[] transferSyntaxes)
        {
            Guard.Against.NullOrWhiteSpace(studyInstanceUid, nameof(studyInstanceUid));
            DicomValidation.ValidateUI(studyInstanceUid);
            Guard.Against.NullOrWhiteSpace(seriesInstanceUid, nameof(seriesInstanceUid));
            DicomValidation.ValidateUI(seriesInstanceUid);

            var seriesUri = GetSeriesUri(studyInstanceUid, seriesInstanceUid);

            transferSyntaxes = transferSyntaxes.Trim();

            _logger?.Log(LogLevel.Debug, $"Sending HTTP request to {seriesUri}");
            var message = new HttpRequestMessage(HttpMethod.Get, seriesUri);

            message.Headers.Add(HeaderNames.Accept, BuildAcceptMediaHeader(MimeType.Dicom, transferSyntaxes));
            var response = await _httpClient.SendAsync(message);

            response.EnsureSuccessStatusCode();

            await foreach (var item in response.ToDicomAsyncEnumerable())
            {
                yield return(item);
            }
        }
Exemple #2
0
        public async Task <T> RetrieveMetadata <T>(
            string studyInstanceUid,
            string seriesInstanceUid,
            string sopInstanceUid)
        {
            Guard.Against.NullOrWhiteSpace(studyInstanceUid, nameof(studyInstanceUid));
            DicomValidation.ValidateUI(studyInstanceUid);
            Guard.Against.NullOrWhiteSpace(seriesInstanceUid, nameof(seriesInstanceUid));
            DicomValidation.ValidateUI(seriesInstanceUid);
            Guard.Against.NullOrWhiteSpace(sopInstanceUid, nameof(sopInstanceUid));
            DicomValidation.ValidateUI(sopInstanceUid);

            var instanceUri        = GetInstanceUri(studyInstanceUid, seriesInstanceUid, sopInstanceUid);
            var instancMetadataUri = new Uri(instanceUri, "metadata");

            _logger?.Log(LogLevel.Debug, $"Sending HTTP request to {instancMetadataUri}");

            try
            {
                await foreach (var metadata in GetMetadata <T>(instancMetadataUri))
                {
                    return(metadata);
                }
            }
            catch (Exception ex) when(!(ex is UnsupportedReturnTypeException))
            {
                _logger?.Log(LogLevel.Error, ex, "Failed to retrieve metadata");
            }

            return(default(T));
        }
Exemple #3
0
 private static bool IsValidJsonNumber(string val)
 {
     try
     {
         DicomValidation.ValidateDS(val);
         return(true);
     }
     catch (DicomValidationException)
     {
         return(false);
     }
 }
Exemple #4
0
        public override void Validate(DicomElement dicomElement)
        {
            base.Validate(dicomElement);

            string value = dicomElement.Get <string>();
            string name  = dicomElement.Tag.GetFriendlyName();

            if (string.IsNullOrEmpty(value))
            {
                return;
            }

            DicomValidation.ValidateTM(value);
        }
Exemple #5
0
        public async IAsyncEnumerable <T> RetrieveMetadata <T>(
            string studyInstanceUid)
        {
            Guard.Against.NullOrWhiteSpace(studyInstanceUid, nameof(studyInstanceUid));
            DicomValidation.ValidateUI(studyInstanceUid);
            var studyUri         = GetStudiesUri(studyInstanceUid);
            var studyMetadataUri = new Uri(studyUri, "metadata");

            _logger?.Log(LogLevel.Debug, $"Sending HTTP request to {studyMetadataUri}");

            await foreach (var metadata in GetMetadata <T>(studyMetadataUri))
            {
                yield return(metadata);
            }
        }
Exemple #6
0
        public async Task <byte[]> Retrieve(
            string studyInstanceUid,
            string seriesInstanceUid,
            string sopInstanceUid,
            DicomTag dicomTag,
            Tuple <int, int?> byteRange = null,
            params DicomTransferSyntax[] transferSyntaxes)
        {
            Guard.Against.NullOrWhiteSpace(studyInstanceUid, nameof(studyInstanceUid));
            DicomValidation.ValidateUI(studyInstanceUid);
            Guard.Against.NullOrWhiteSpace(seriesInstanceUid, nameof(seriesInstanceUid));
            DicomValidation.ValidateUI(seriesInstanceUid);
            Guard.Against.NullOrWhiteSpace(sopInstanceUid, nameof(sopInstanceUid));
            DicomValidation.ValidateUI(sopInstanceUid);

            return(await Retrieve(new Uri(_serviceUri, $"studies/{studyInstanceUid}/series/{seriesInstanceUid}/instances/{sopInstanceUid}/bulk/{dicomTag.Group:X4}{dicomTag.Element:X4}"), byteRange, transferSyntaxes));
        }
        /// <inheritdoc />
        public async Task <DicomFile> Retrieve(
            string studyInstanceUid,
            string seriesInstanceUid,
            string sopInstanceUid,
            params DicomTransferSyntax[] transferSyntaxes)
        {
            Guard.Against.NullOrWhiteSpace(studyInstanceUid, nameof(studyInstanceUid));
            DicomValidation.ValidateUI(studyInstanceUid);
            Guard.Against.NullOrWhiteSpace(seriesInstanceUid, nameof(seriesInstanceUid));
            DicomValidation.ValidateUI(seriesInstanceUid);
            Guard.Against.NullOrWhiteSpace(sopInstanceUid, nameof(sopInstanceUid));
            DicomValidation.ValidateUI(sopInstanceUid);

            var instanceUri = GetInstanceUri(studyInstanceUid, seriesInstanceUid, sopInstanceUid);

            transferSyntaxes = transferSyntaxes.Trim();

            _logger?.Log(LogLevel.Debug, $"Sending HTTP request to {instanceUri}");
            var message = new HttpRequestMessage(HttpMethod.Get, instanceUri);

            message.Headers.Add(HeaderNames.Accept, BuildAcceptMediaHeader(MimeType.Dicom, transferSyntaxes));
            var response = await _httpClient.SendAsync(message).ConfigureAwait(false);

            response.EnsureSuccessStatusCode();

            try
            {
                await foreach (var item in response.ToDicomAsyncEnumerable())
                {
                    return(item);
                }
            }
            catch (Exception ex)
            {
                _logger?.Log(LogLevel.Error, ex, "Failed to retrieve instances");
            }

            return(null);
        }