jsReport not starting - IIS - .Net Framework
-
I have a web application which uses .Net Framework 4.7.1 and hosted in IIS. The jsReport is started in the application start event in global.ascx. All work fine in dev environment where we use IIS express for development, but in production environments, I can see a lot of chrome processes started while each report is generated. Also, few of the chrome processes go into the suspended state. When the IIS application is restarted, jsReport is not started due to these suspended chrome processes.
I would like to know if starting jsReport at application start is the right way of doing this and a workaround to start jsReport when suspended chrome processes exist.
Is there a way to start jsReport on-demand in .Net Framework?Any help or guidance is really appreciated.
-
Thank you for the problem report.
Do you use utility or webserver jsreport local startup?
Did you try to useKillRunningJsReportProcesses
during init?var rs = new LocalReporting() .UseBinary(JsReportBinary.GetBinary()) .KillRunningJsReportProcesses()
The chrome suspended state isn't likely a problem. Rather a jsreport port collision.
I wasn't able to replicate the problems with IIS myself, but I hear some complaints that this is sometimes happening. Have you done some specific IIS configuration? Like configured it to use multiple worker processes?If you have access to the computer with IIS, could you consider running jsreport outside IIS as windows service? Basically almost all of your current code would stay the same, you would just use the
jsreport.Client
package instead of thejsreport.Local
.
-
Thanks for the reply.
Me and Bimal work in same team and here is what I see happening.
When a print is clicked and render service is clicked there are on an average 6 to 7 chromium processes that can be seen when we check Task manager processes. In 50% of cases 1 of those chromium process is left in suspended state.
This process does not affect any existing pdf generation.
When an application pool on IIS is restarted on app_start we have code to restart the jsreport server.
var rs = new LocalReporting()
.UseBinary(JsReportBinary.GetBinary())
.KillRunningJsReportProcesses()
.RunInDirectory(basePath)
.Configure(cfg =>
{
cfg.HttpPort = port;
cfg.AppPath = Path.Combine(basePath, "app");
cfg.TempDirectory = Path.Combine(basePath, "temp");
return cfg.BaseUrlAsWorkingDirectory();
})
.AsWebServer()
.Create();
When there is a suspended chromium process, bove code fails to start jsreport.
That is when we have to kill all suspended processes and recycle app pool.(After killing suspended process this works).Here is js config setting that we use
{
"templatingEngines": {
"numberOfWorkers": 4,
"timeout": 20000
},
"logger": {
"file": {
"transport": "file",
"level": "info",
"filename": "EBSPdfLog.txt",
"maxsize": 25000,
"maxFiles": 1
}
}
}We tried to increaase number of workers and timeout but still get those suspended processes.
Js report Local is 2.2.2
Js report Binary is 2.6.1