private static MemoryStream RetrieveImageData(string url, out StreamingResultMetaData result)
        {
            try
            {
                result = new StreamingResultMetaData();

                result.Speed.Start();

                var request = (HttpWebRequest)WebRequest.Create(url.ToString());
                request.Accept    = "application/dicom,application/Macro,application/Macro-header,image/jpeg,application/pdf";
                request.Timeout   = (int)TimeSpan.FromSeconds(StreamingSettings.Default.ClientTimeoutSeconds).TotalMilliseconds;
                request.KeepAlive = false;

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new StreamingClientException(response.StatusCode, HttpUtility.HtmlDecode(response.StatusDescription));
                }

                Stream       responseStream = response.GetResponseStream();
                BinaryReader reader         = new BinaryReader(responseStream);
                byte[]       buffer         = reader.ReadBytes((int)response.ContentLength);
                reader.Close();
                responseStream.Close();
                response.Close();

                result.Speed.SetData(buffer.Length);
                result.Speed.End();

                result.ResponseMimeType  = response.ContentType;
                result.Status            = response.StatusCode;
                result.StatusDescription = response.StatusDescription;
                result.Uri           = response.ResponseUri;
                result.ContentLength = buffer.Length;

                return(new MemoryStream(buffer));
            }
            catch (WebException ex)
            {
                if (ex.Status == WebExceptionStatus.ProtocolError && ex.Response is HttpWebResponse)
                {
                    HttpWebResponse response = (HttpWebResponse)ex.Response;
                    throw new StreamingClientException(response.StatusCode, HttpUtility.HtmlDecode(response.StatusDescription));
                }
                throw new StreamingClientException(StreamingClientExceptionType.Network, ex);
            }
        }
        public Stream RetrievePdf(string serverAE, string studyInstanceUID, string seriesInstanceUID, string sopInstanceUid, out StreamingResultMetaData metaInfo)
        {
            string imageUrl = BuildImageUrl(serverAE, studyInstanceUID, seriesInstanceUID, sopInstanceUid);

            imageUrl = imageUrl + String.Format("&contentType={0}", HttpUtility.HtmlEncode("application/pdf"));
            return(RetrieveImageData(imageUrl, out metaInfo));
        }
        public Stream RetrieveImageHeader(string serverAE, string studyInstanceUID, string seriesInstanceUID, string sopInstanceUid, uint stopTag, out StreamingResultMetaData metaInfo)
        {
            string imageUrl = BuildImageUrl(serverAE, studyInstanceUID, seriesInstanceUID, sopInstanceUid);

            imageUrl = imageUrl + String.Format("&stopTag={0:x8}", stopTag);
            imageUrl = imageUrl + String.Format("&contentType={0}", HttpUtility.HtmlEncode("application/Macro-header"));
            return(RetrieveImageData(imageUrl, out metaInfo));
        }