SaveDocumentToByteArray() -> Load(byte[]) :(
Добавлено: 06 июн 2014, 15:07
Добрый день!
у меня есть WebApi-сервис, в рамках которого рендерится отчет, который потом отдается в выходной поток:
на выходе - корректный отчет (rpt.SaveDocument дает бинарный файл, который корректно открывается стандартным Viewer.exe)
имеется ASP.NET MVC сайт, который потребляет то, что создано WebApi-сервис'ом:
в rrr нормально приходит все тот же массив (но правда проверил только лишь его размеры - искажения не проверял - навряд ли там они есть)
далее:
в момент breakpoint в debug'е делаю: report.SaveDocument("путь");
формируется пустой отчет.
report.SaveDocumentToByteArray() дает уже другой довольно короткий массив, похожий на "пустой" отчет.
Вопрос:
что я делаю не так, и как корректно из массива в данной ситуации развернуть и показать созданный где-то "очень далеко" отчет?
Дополнение - провел эксперимент:
rpt2 - после загрузки из массива опять получается пустой отчет,
и если rrr1 ~170K
то rrr2 638 байт
значит я как-то не корректно работаю с отчетом, как надо?
у меня есть WebApi-сервис, в рамках которого рендерится отчет, который потом отдается в выходной поток:
Код: Выделить всё
public async Task<HttpResponseMessage> GetReportById(....)
{
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
...
StiReport rpt = ...
rpt.Render();
result.Content = new StreamContent(new MemoryStream(rpt.SaveDocumentToByteArray()));
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
}
имеется ASP.NET MVC сайт, который потребляет то, что создано WebApi-сервис'ом:
Код: Выделить всё
HttpClient zone = new HttpClient();
zone.BaseAddress = new Uri(WebApiZoneBaseAddress);
zone.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
....
HttpResponseMessage response = zone.GetAsync(uri)
response.EnsureSuccessStatusCode();
byte[] rrr = response.Content.ReadAsByteArrayAsync().Result;
далее:
Код: Выделить всё
public ActionResult GetReportSnapshot()
{
...
StiReport report = new StiReport();
...
report.Load(rrr);
>>>> breakpoint >>>>>
return StiMvcViewer.GetReportSnapshotResult(HttpContext, report);
}
формируется пустой отчет.
report.SaveDocumentToByteArray() дает уже другой довольно короткий массив, похожий на "пустой" отчет.
Вопрос:
что я делаю не так, и как корректно из массива в данной ситуации развернуть и показать созданный где-то "очень далеко" отчет?
Дополнение - провел эксперимент:
Код: Выделить всё
StiReport rpt1 = new StiReport();
...
rpt1.Render();
byte[] rrr1 = rpt1.SaveDocumentToByteArray();
StiReport rpt2 = new StiReport();
rpt2.Load(rrr1);
byte[] rrr2 = rpt2.SaveDocumentToByteArray();
и если rrr1 ~170K
то rrr2 638 байт
значит я как-то не корректно работаю с отчетом, как надо?