У нас есть приложение webforms, которое генерирует параметрические документы. Пользователь предоставляет некоторую информацию, нажимает кнопку, и наш веб-сервис генерирует документы Word.
Служба работает для одного документа за раз, но не для пакетов. Мы хотим добавить возможность обрабатывать более одного документа. Теперь у нас есть код ниже, где contactIdsForLetters равен List<int>
.
foreach (int contactId in contactIdsForLetters)
{
string parameters = string.Format("ContactID~{0}", contactId);
string defaultFilename = Reporting.Utilities.CreateDefaultFileName(outputformat);
byte[] bytes = Reporting.Reports.CreateReport(selectedReportId, parameters, outputformat, out serviceCallWasSuccessful);
if (!serviceCallWasSuccessful || bytes == null)
{
Reporting.Reports.LogReportActivity(selectedReportId, string.Empty, parameters, userLogin, false);
return;
}
Reporting.Reports.LogReportActivity(selectedReportId, string.Empty, parameters, userLogin, true);
Reporting.Utilities.SendResponse(defaultFilename, bytes);
}
При запуске вышеуказанного кода возвращается только один документ. Один документ обрабатывается (For-Each
никогда не попадает ко второму элементу в contactIdsForLetters
), появляется диалоговое окно с просьбой открыть или сохранить файл, и после нажатия кнопки «Открыть» Word открывается вместе с документом. Все происходит так, как должно, но мы не можем заставить For-Each
обработать второй и последующие документы.
Пользователи хотят отдельную сессию Word для каждого возвращаемого документа. Последующие документы нужно будет открыть в своем собственном сеансе Word.
Как мне пройти по List<int>
, отправить каждый int
в службу по одному и открыть сеанс Word для каждого возвращенного документа?
Вот SendResponse () ...
public static void SendResponse(string defaultFilename, byte[] bytes)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Buffer = false;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}", defaultFilename));
HttpContext.Current.Response.AppendHeader("Content-Length", bytes.Length.ToString());
HttpContext.Current.Response.BinaryWrite(bytes);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}