Как настроить jsreport MVC для запуска в качестве веб-сервера, а не утилиты?
Я хочу использовать jsreport в режиме веб-сервера вместо режима утилит с ASP.NET MVC. Служебный режим заключается в использовании аргументов командной строки и режима сервера для запуска двоичного файла в качестве веб-сервера и связи с ним по протоколу http.
Это показано на jsreport.net, но нет примера для версии CustomFilter, используемой в MVC.
var rs = new LocalReporting().UseBinary(JsReportBinary.GetBinary()).AsWebServer().Create();
await rs.StartAsync();
var report = await rs.RenderAsync(...);
await rs.KillAsync();
Поэтому я хочу использовать его в качестве решения CustomFilter в MVC.
1 ответ
Первый шаг - переписать метод RegisterGlobalFilters, чтобы использовать jsreport в качестве веб-сервера:
public static ILocalWebServerReportingService RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
var rs = new LocalReporting()
.Configure(cfg =>
{
cfg.BaseUrlAsWorkingDirectory();
return cfg;
})
.UseBinary(JsReportBinary.GetBinary())
.AsWebServer()
.Create();
rs.StartAsync().GetAwaiter().GetResult();
filters.Add(new JsReportFilterAttribute(rs));
return rs;
}
и затем нам нужно использовать службу отчетов, на которую ссылаются, для остановки на конце приложения в Global.asax:
public class MvcApplication : System.Web.HttpApplication
{
private ILocalWebServerReportingService reportingService;
protected void Application_Start()
{
...
reportingService = FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
...
}
protected void Application_End()
{
reportingService.KillAsync().GetAwaiter().GetResult();
}
}