Создание файлов отчетов SSRS в Parallel.ForEachAsync не имеет имен файлов, соответствующих их содержимому на C#.NET 8. МC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Создание файлов отчетов SSRS в Parallel.ForEachAsync не имеет имен файлов, соответствующих их содержимому на C#.NET 8. М

Сообщение Anonymous »

Чтобы ускорить генерацию файлов с помощью SSRS, я создал код Parallel.ForEachAsync для разделения на 4 потока. Затем: выполните несколько запросов к базе данных, затем запросы SSRS для создания отчетов и, наконец, запишите байты результата в поток. жесткий диск. Но по какой-то причине имя файла не соответствует содержимому созданного файла. Имя файла строится на основе некоторых значений из тех же параметров, которые использовались для запроса генерации отчета в SSRS.
Первое, что любопытно: при создании одного файла все идет нормально и имя файла совпадает. содержимое соответствующего файла заставляет меня думать, что это может быть какая-то проблема, вызванная параллельными потоками, одна из них .
Я включаю только эскиз с основными строками кода для генерация файла с использованием Parallel.ForeEchAsync для простоты:

Код: Выделить всё

public async Task ProcessReportOnParallelAsync( PocoClass pocoObj )
{
List people = (await this.PeopleRepository.RetrieveAllInvolved( pocoObj.Params )).ToList();
await Parallel.ForEachAsync( people, new ParallelOptions{ MaxDegreeOfParallelism = 4 }, async ( personPoco, token ) =>
{
var personDetail = await this.PersonDetailsRepository( personPoco.Id, personPoco.CompanyId );
if( personDetail.ShouldGenerateReport )
{
await Report.GenerateAsync( personPoco );
}

});
}

Код: Выделить всё

public async static Task GenerateAsync( PocoClass pocoObj )
{
//setup all SSRS object configuration to request the report generation
var rsExec = new ReportExecutionServiceSoapClient( httpBinding, new EndpointAddress(SSRSReportExecutionUrl));
// ...

// Finally
await rsExec.SetExecutionParameterAsync( null, null, reportParams, "en-us" );
const string deviceInfo = @"False";
var response await rsExec.RenderAsync( new RenderRequest(null, null, "EXCELOPENXML", deviceInfo));
var byteResults = response.Result;
string filename = $@"{pocoObj.Id}_{pocoObj.Name}_{pocoObj.Company}";
string filepath = $@"{this.FolderPathForFileGeneration}\{filename}";

var fs = new FileStream(filepath, FileMode.Create, FileAccess.ReadWrite);
await fs.WriteAsync( byteResults);
fs.Close();
}
Второе любопытство заключается в том, что раньше я создавал очень похожий код (который был базовым кодом для этого) для другого отчета о контексте/SSRS в том же проекте. Единственная разница (за исключением задействованных параметров и классов) в инструкциях Parallel и SSRS — это параметр RenderRequest, вместо RenderRequest(null, null, "EXCELOPENXML", deviceInfo) другой генерирует PDF-файлы: RenderRequest(null, null, "PDF", deviceInfo), на нем все идет хорошо, имена файлов соответствуют их содержимому.
Поэтому хотелось бы понять, что же может происходить, что Я этого не понял: хранимая процедура, задействованная при создании отчета, или разница в конфигурации между двумя отчетами SSRS, или что-то еще, я не знаю.
Также если есть решение, другое предложение или лучший подход для этой реализации.
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... ilenames-m
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»