public void MediaOnDemand(ParkingEvent parkingEvent, string imageAssetUid, string timestamp, Customer customer) { var media = GetMedia(imageAssetUid, timestamp); Image image = new Image { PropertyId = parkingEvent.Properties.Id }; var i = 1; TimeSpan startTime = DateTime.Now.TimeOfDay; while (i < 6 && (image?.Entry == null || !image.Entry.Contents.Any(x => x.Status.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase)))) { i++; if (!string.IsNullOrWhiteSpace(media?.PollUrl)) { Dictionary <string, string> additionalHeaders = new Dictionary <string, string> { { "predix-zone-id", Endpoint.PredixZoneIdForImage } }; var response = _predixHttpClient.GetAllAsync(media.PollUrl, additionalHeaders); if (!string.IsNullOrWhiteSpace(response.Result)) { try { var jsonRespone = JsonConvert.DeserializeObject <JObject>(response.Result); image = jsonRespone != null ? (jsonRespone).ToObject <Image>() : new Image(); } catch (Exception e) { Commentary.Print(e.Message); Commentary.Print(response.Result); } } } if (image?.Entry == null || !image.Entry.Contents.Any(x => x.Status.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase))) { Commentary.Print( $"Polling for Media Data {i} time after {DateTime.Now.TimeOfDay.Subtract(startTime).TotalMinutes} minutes: {media.PollUrl}", true); //Thread.Sleep(1000 * 60); if (i < 6) { Task.Delay(1000 * 60).Wait(1000 * 60); } continue; } var imageBinary = (from content in image.Entry.Contents let additionalHeaders = new Dictionary <string, string> { { "predix-zone-id", Endpoint.PredixZoneIdForImage } } select _predixHttpClient.GetFile(content.Url, additionalHeaders) into response select response.Result).FirstOrDefault(); image.Base64 = imageBinary; image = MarkPixelCoordinates(parkingEvent: parkingEvent, image: image, customer: customer); } if (image == null) { return; } image.PropertyId = parkingEvent.Properties.Id; image.ImageAssetUid = imageAssetUid; image.OriginalBase64 = null; image.Base64 = null; Save(image); //return image.Base64; }