private HttpContent CreateResponseContent ( WebStoreRequest request, WadoStoreResponse storeResult ) { HttpContent content; //this is not taking the "q" parameter if (new MimeMediaType(MimeMediaTypes.Json).IsIn(request.AcceptHeader)) { IJsonDicomConverter converter = GetJsonConverter(); content = new StringContent(converter.Convert(storeResult.GetResponseContent()), System.Text.Encoding.UTF8, MimeMediaTypes.Json); } else { IXmlDicomConverter xmlConverter = GetXmlConverter(); content = new StringContent(xmlConverter.Convert(storeResult.GetResponseContent()), System.Text.Encoding.UTF8, MimeMediaTypes.xmlDicom); } return(content); }
public virtual async Task <HttpResponseMessage> Store ( WebStoreRequest request, string studyInstanceUID ) { GetDicomHandler getDicomDelegate = CreateDatasetParser(request); if (null != getDicomDelegate) { var storeResult = await StoreStudy(request, studyInstanceUID, getDicomDelegate); var result = new HttpResponseMessage(storeResult.HttpStatus); if (!string.IsNullOrWhiteSpace(storeResult.StatusMessage)) { result.ReasonPhrase = storeResult.StatusMessage; } result.Content = CreateResponseContent(request, storeResult); return(result); } else { return(new HttpResponseMessage(HttpStatusCode.BadRequest)); } }
private async Task <WadoStoreResponse> StoreStudy(WebStoreRequest request, string studyInstanceUID, GetDicomHandler getDicom) { WadoStoreResponse response = new WadoStoreResponse(studyInstanceUID); foreach (var mediaContent in request.Contents) { Stream dicomStream = await mediaContent.ReadAsStreamAsync(); var dicomDs = getDicom(dicomStream); PublisherSubscriberFactory.Instance.Publish(this, new WebStoreDatasetProcessingMessage(request, dicomDs)); try { var result = _storageService.StoreDicom(dicomDs, CreateObjectMetadata(dicomDs, request)); response.AddResult(dicomDs); PublisherSubscriberFactory.Instance.Publish(this, new WebStoreDatasetProcessedMessage(request, dicomDs)); } catch (Exception ex) { response.AddResult(dicomDs, ex); PublisherSubscriberFactory.Instance.Publish(this, new WebStoreDatasetProcessingFailureMessage(request, dicomDs, ex)); } } return(response); }
public async Task <HttpResponseMessage> Post(string StudyInstanceUID = null) { WebStoreRequest webStoreRequest = new WebStoreRequest(Request); if (!Request.Content.IsMimeMultipartContent("related")) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } await Request.Content.ReadAsMultipartAsync(webStoreRequest); return(await StorageService.Store(webStoreRequest, StudyInstanceUID)); }
private GetDicomHandler CreateDatasetParser(WebStoreRequest request) { GetDicomHandler getDicomDelegate = null; switch (request.MediaType) { case MimeMediaTypes.DICOM: { getDicomDelegate = GetDicom; } break; case MimeMediaTypes.xmlDicom: { getDicomDelegate = new GetDicomHandler(delegate(Stream stream) { StreamReader reader = new StreamReader(stream); string xmlString = reader.ReadToEnd(); return(GetXmlConverter().Convert(xmlString)); }); } break; case MimeMediaTypes.Json: { getDicomDelegate = new GetDicomHandler(delegate(Stream stream) { StreamReader reader = new StreamReader(stream); string jsonString = reader.ReadToEnd(); return(GetJsonConverter().Convert(jsonString)); }); } break; default: { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } } return(getDicomDelegate); }
public async Task Web_Storage_Simple( ) { DicomDataset[] storeDs = new DicomDataset[] { DicomHelper.GetDicomDataset(0), DicomHelper.GetDicomDataset(1), DicomHelper.GetDicomDataset(2) }; var request = new HttpRequestMessage(); WebStoreRequest webStoreRequest = new WebStoreRequest(request); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(MimeMediaTypes.Json)); webStoreRequest.MediaType = MimeMediaTypes.DICOM; var mimeType = "application/dicom"; var multiContent = new MultipartContent("related", "DICOM DATA BOUNDARY"); multiContent.Headers.ContentType.Parameters.Add(new System.Net.Http.Headers.NameValueHeaderValue("type", "\"" + mimeType + "\"")); foreach (var ds in storeDs) { DicomFile dicomFile = new DicomFile(ds); MemoryStream ms = new MemoryStream(); dicomFile.Save(ms); ms.Position = 0; StreamContent sContent = new StreamContent(ms); sContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(mimeType); multiContent.Add(sContent); webStoreRequest.Request.Content = multiContent; webStoreRequest.Contents.Add(sContent); } var storeResult = await WebStoreService.Store(webStoreRequest); Assert.IsNotNull(storeResult); Assert.IsTrue(storeResult.IsSuccessStatusCode); ValidateStoredMatchQuery(storeDs); Pacs_Delete_Simple( ); }
public virtual async Task <HttpResponseMessage> Store ( WebStoreRequest request, string studyInstanceUID ) { GetDicomHandler getDicomDelegate = CreateDatasetParser(request); if (null != getDicomDelegate) { var storeResult = await StoreStudy(request, studyInstanceUID, getDicomDelegate); var result = new HttpResponseMessage(storeResult.HttpStatus); //this is not taking the "q" parameter if (new MimeMediaType(MimeMediaTypes.Json).IsIn(request.AcceptHeader)) { IJsonDicomConverter converter = GetJsonConverter(); result.Content = new StringContent(converter.Convert(storeResult.GetResponseContent()), System.Text.Encoding.UTF8, MimeMediaTypes.Json); } else { IXmlDicomConverter xmlConverter = GetXmlConverter(); result.Content = new StringContent(xmlConverter.Convert(storeResult.GetResponseContent()), System.Text.Encoding.UTF8, MimeMediaTypes.xmlDicom); } return(result); } else { return(new HttpResponseMessage(HttpStatusCode.BadRequest)); } }
public async Task <HttpResponseMessage> Post(string studyInstanceUID = null) { WebStoreRequest webStoreRequest = new WebStoreRequest(Request); IStudyId studyId = null; if (!string.IsNullOrWhiteSpace(studyInstanceUID)) { studyId = new ObjectId( ) { StudyInstanceUID = studyInstanceUID }; } if (!Request.Content.IsMimeMultipartContent("related")) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } await Request.Content.ReadAsMultipartAsync(webStoreRequest); return(await StorageService.Store(webStoreRequest, studyId)); }
public WebStoreDatasetMessage(WebStoreRequest request, DicomDataset dataset) { Request = request; Dataset = dataset; }
protected virtual InstanceMetadata CreateObjectMetadata(fo.DicomDataset dataset, WebStoreRequest request) { return(new InstanceMetadata( ) { }); }
public WebStoreDatasetProcessingMessage(WebStoreRequest request, DicomDataset dataset) : base(request, dataset) { }
public WebStoreDatasetProcessingFailureMessage(WebStoreRequest request, DicomDataset dataset, Exception error) : base(request, dataset) { Error = error; }