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); } }
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)); }
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); } }
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); }