NETReporter.Client 3.8.1
NETReporter.Client
Tenký klient pro ReportServer: stejné rozhraní jako knihovna NETReporter, ale report se vykreslí na serveru. Aplikace nemusí nést QuestPDF, Roslyn, OxyPlot ani ZXing; přihlašuje se API tokenem, který si vygenerujete v UI ReportServeru.
Klient implementuje IReportRenderer a ITemplateTools z balíčku NETReporter.Abstractions, takže mezi lokálním a vzdáleným renderem přepíná jen registrace v DI. Kód, který renderuje, se nemění.
Instalace
dotnet nuget add source https://nuget.advisor-soft.com/v3/index.json --name AdvisorSoft
dotnet add package NETReporter.Client
Požadavky: .NET 10. Balíčky NETReporter, NETReporter.Abstractions a NETReporter.Client se vydávají společně se stejnou verzí.
API token
- Přihlaste se do UI ReportServeru a otevřete stránku API tokeny.
- Zadejte název (a případně dobu platnosti) a token vytvořte. Otevřený text se ukáže jen jednou, server si pamatuje jen hash; uložte ho do tajných hodnot (proměnná prostředí, user secrets, trezor), ne do repozitáře.
- Token má stejná práva jako jeho vlastník. Odvolat ho může vlastník i správce; deaktivace vlastníka ho vyřadí hned.
Rychlý start s DI
using Microsoft.Extensions.DependencyInjection;
using NetReporter;
services.AddNetReporterClient(options =>
{
options.BaseAddress = new Uri("https://reports.example.com/api"); // adresa API včetně předpony cesty
options.ApiToken = configuration["NetReporter:ApiToken"]; // nrp_…
});
// kdekoli v aplikaci
public sealed class InvoiceService(IReportRenderer renderer)
{
public async Task<byte[]> CreatePdfAsync(Stream template, Stream data)
{
await using var pdf = await renderer.RenderAsync(template, data);
using var buffer = new MemoryStream();
await pdf.CopyToAsync(buffer);
return buffer.ToArray();
}
}
Nastavení jde číst z konfigurace: services.AddNetReporterClient(configuration) čte sekci NetReporterClient s klíči BaseAddress, ApiToken a Timeout. Chybějící adresa nebo token zastaví aplikaci při startu srozumitelnou chybou.
Bez DI
using NetReporter.Client;
using var http = NetReporterClient.CreateHttpClient(new NetReporterClientOptions
{
BaseAddress = new Uri("https://reports.example.com/api"),
ApiToken = Environment.GetEnvironmentVariable("NETREPORTER_API_TOKEN")
});
IReportRenderer renderer = new ReportServerRenderer(http);
ITemplateTools tools = new ReportServerTemplateTools(http);
Co klient umí
- Render libovolné šablony (ad-hoc) do všech formátů: PDF, HTML, JSON, SVG, WebP, PNG, JPEG, i po stránkách (
RenderSvgPagesAsync,RenderWebpPagesAsync, …) a se všemi volbamiRenderOptions(PDF/A, přílohy, šifrování, vodoznak, rozlišení…). - Diagnostiky bindingů přes
RenderOptions.OnBindingDiagnosticsa pozorovatele pipeline. - Nástroje nad šablonou (
ITemplateTools): validace šablony a dat, datový kontrakt a ukázková data. - Mimo rozsah: správa uložených šablon, render podle uložené šablony a historie jobů (ty zůstávají v UI a REST API).
Čím se vzdálený render liší od lokálního
- Soubory z disku se na serveru nenačítají: obrázky, SVG ani podklady PDF z cesty k souboru nefungují (použijte data URI nebo adresu http/https).
- Server omezuje počet stránek, rozlišení obrazů a velikost příloh; diagnostik bindingů vrací nejvýše 50 různých.
RenderOptions.Iconsse nepoužije: server vykresluje ikony vlastním katalogem.- Pozorovatel pipeline dostane zjednodušené události (parsování proběhlo na serveru).
Chyby
| Situace | Výjimka |
|---|---|
| Chyba v šabloně | ReportServerException (kód TEMPLATE_VALIDATION_FAILED, Diagnostics s JSON cestami) |
| Vadné volby | ArgumentException (ParamName == "options"), u lokálních kontrol bez volání serveru |
| Překročený limit stránek | RenderPageLimitExceededException |
| Zrušení volajícím | OperationCanceledException |
| Neplatný, odvolaný nebo prošlý token | ReportServerException (AUTH_UNAUTHORIZED) |
Server nedostupný nebo překročený Timeout |
ReportServerException (REPORTSERVER_UNAVAILABLE nebo REPORTSERVER_TIMEOUT) |
ReportServerException dědí z InvalidOperationException, takže ji zachytí i kód napsaný pro lokální render. Seznam změn je v souboru CHANGELOG.md v balíčku.
No packages depend on NETReporter.Client.
.NET 10.0
- NETReporter.Abstractions (>= 3.8.1)
- Microsoft.Extensions.Http (>= 10.0.13)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.13)
| Version | Downloads | Last updated |
|---|---|---|
| 3.9.2 | 4 | 10/28/2026 |
| 3.9.1 | 1 | 10/27/2026 |
| 3.9.0 | 8 | 10/20/2026 |
| 3.8.1 | 3 | 10/19/2026 |
| 3.8.0 | 3 | 10/19/2026 |
| 3.7.0 | 3 | 10/19/2026 |
| 3.6.0 | 4 | 10/17/2026 |
| 3.5.1 | 4 | 10/15/2026 |
| 3.5.0 | 4 | 10/15/2026 |
| 3.4.2 | 4 | 10/15/2026 |
| 3.4.0 | 4 | 10/12/2026 |
| 3.3.0 | 4 | 10/11/2026 |
| 3.2.2 | 4 | 10/10/2026 |
| 3.2.1 | 4 | 10/10/2026 |
| 3.2.0 | 4 | 10/10/2026 |
| 3.1.1 | 4 | 10/09/2026 |
| 3.1.0 | 4 | 10/09/2026 |
| 3.0.1 | 4 | 10/08/2026 |
| 3.0.0 | 4 | 10/08/2026 |
| 2.2.1 | 5 | 10/05/2026 |
| 2.2.0 | 4 | 10/05/2026 |
| 2.1.0 | 4 | 10/04/2026 |
| 2.0.1 | 4 | 10/04/2026 |
| 2.0.0 | 4 | 10/03/2026 |
| 1.7.0 | 4 | 10/03/2026 |