c# - 如何设置 jsreport MVC 作为网络服务器而不是实用程序运行?
问题描述
我想在网络服务器模式下使用 jsreport,而不是在 ASP.NET MVC 中使用实用程序模式。实用程序模式是使用命令行参数和服务器模式将二进制文件作为 Web 服务器启动并使用 http 协议与其通信。
这在 jsreport.net 上显示,但没有用于 MVC 中的 CustomFilter 版本的示例。
var rs = new LocalReporting().UseBinary(JsReportBinary.GetBinary()).AsWebServer().Create();
await rs.StartAsync();
var report = await rs.RenderAsync(...);
await rs.KillAsync();
所以我想用它作为 MVC 中的 CustomFilter 解决方案。
解决方案
第一步是重写RegisterGlobalFilters方法以使用jsreport作为webserver:
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();
}
}