Как настроить jsreport MVC для запуска в качестве веб-сервера, а не утилиты? - PullRequest
0 голосов
/ 16 января 2019

Я хочу использовать 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 Ответ

0 голосов
/ 16 января 2019

Первый шаг - переписать метод 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();
  }
}
...