public void Render(AbortState abortState, string reportPath, string executionId, string historyId, string format, XmlNodeList deviceInfo, NameValueCollection urlAccessParameters, Stream reportStream, out string mimeType, out string fileNameExtension) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}?{1}&rs:SessionID={2}&rs:command=Render&rs:Format={3}", Service.UrlForRender, UrlUtil.UrlEncode(reportPath), UrlUtil.UrlEncode(executionId), UrlUtil.UrlEncode(format)); if (!string.IsNullOrEmpty(historyId)) { stringBuilder.Append("&rs:snapshot="); stringBuilder.Append(UrlUtil.UrlEncode(historyId)); } if (deviceInfo != null) { foreach (XmlNode item in deviceInfo) { stringBuilder.Append("&rc:"); stringBuilder.Append(UrlUtil.UrlEncode(item.Name)); stringBuilder.Append("="); stringBuilder.Append(UrlUtil.UrlEncode(item.InnerText)); } } stringBuilder.Append("&rc:Toolbar=false&rs:ErrorResponseAsXml=true&rs:AllowNewSessions=false"); if (urlAccessParameters != null) { foreach (string key in urlAccessParameters.Keys) { stringBuilder.Append("&"); stringBuilder.Append(UrlUtil.UrlEncode(key)); stringBuilder.Append("="); stringBuilder.Append(UrlUtil.UrlEncode(urlAccessParameters[key])); } } ServerUrlRequest(abortState, stringBuilder.ToString(), reportStream, out mimeType, out fileNameExtension); }
private void ServerUrlRequest(AbortState abortState, string url, Stream outputStream, out string mimeType, out string fileNameExtension) { byte[] userToken = null; string userName = string.Empty; if (m_trustedUserHeader != null) { userName = m_trustedUserHeader.UserName; userToken = m_trustedUserHeader.UserToken; } HttpWebRequest serverUrlAccessObject = WebRequestHelper.GetServerUrlAccessObject(url, m_timeout, ServerNetworkCredentials, Service.FormsAuthCookie, m_headers, m_cookies, userName, BearerToken, userToken); if (abortState != null && !abortState.RegisterAbortableRequest(serverUrlAccessObject)) { throw new OperationCanceledException(); } try { using (new ServerImpersonationContext(m_impersonationUser)) { WebResponse response = serverUrlAccessObject.GetResponse(); mimeType = response.Headers["Content-Type"]; fileNameExtension = response.Headers["FileExtension"]; Stream responseStream = response.GetResponseStream(); if (responseStream == null) { return; } using (responseStream) { byte[] array = new byte[81920]; int count; while ((count = responseStream.Read(array, 0, array.Length)) > 0) { outputStream.Write(array, 0, count); } } } } catch (Exception e) { throw WebRequestHelper.ExceptionFromWebResponse(e); } }