Hi Jan,
You're right. I changed it to use HttpClient, now it works.
Thanks a lot.
Hi Jan,
You're right. I changed it to use HttpClient, now it works.
Thanks a lot.
Hi Jan,
The WebClient2 is just a class that inherited from normal .net WebClient, it just exposes the timeout for adjustment. Nothing special. You can just consider it as a normal WebClient. Here is WebClient2 code:
public class WebClient2 : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
request.Timeout = Timeout;
return request;
}
public int Timeout { get; set; } = 300000;
}
Hi Jan,
Thanks for reply. My client codes work well before I put the settings. The report returns correct data if I select date range from 1 Jan 2018 to 1 Jun 2018. But throw an error of "entity is too large" error if I select date range from 1 Jan 2018 to 10 Aug 2018. So I added the settings, then it throws the above error. At my client side code (c#), I increased the timeout to 10 mins. Below is my client code to get the report:
public HttpResponseMessage RenderReport(string format, ReportResult data)
{
var view = _report.ViewFormats.FirstOrDefault(o => o.FormatName.ToLower() == format.ToLower());
if (view == null)
{
view = _report.DefaultViewFormat;
}
var client = new WebClient2()
{
Timeout = 600000
};
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
dynamic rptData = new ExpandoObject();
rptData.template = new ExpandoObject();
rptData.template.shortid = view.ViewName;
if (!string.IsNullOrEmpty(view.ViewType))
{
rptData.template.recipe = view.ViewType;
rptData.options = new Dictionary<string, string>()
{
{ "Content-Disposition", $"attachment; filename={_report.ReportName}.{view.FormatName}" }
};
}
rptData.data = data;
var obj = Newtonsoft.Json.JsonConvert.SerializeObject(rptData);
byte[] result = client.UploadData(ProviderService.Config.ReportHost, System.Text.UTF8Encoding.UTF8.GetBytes(obj));
var responseContentType = client.ResponseHeaders.GetValues("content-type").FirstOrDefault();
if (responseContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetf")
responseContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var response = new HttpResponseMessage(HttpStatusCode.OK);
if (responseContentType == "text/html")
{
response.Content = new StringContent(System.Text.UTF8Encoding.UTF8.GetString(result));
} else
{
response.Content = new ByteArrayContent(result);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = $"{_report.ReportName}.{view.FormatName}"
};
}
response.Content.Headers.ContentType = new MediaTypeHeaderValue(responseContentType);
response.Content.Headers.ContentLength = result.Length;
return response;
}
Could you please have a look?
Thanks.
Chunsheng Cai
Hi, I'm using jsreport 1.4.0 on windows system. I hit an error of entity is too large. The data sent to jsreport is 29Mb, I read the article that by default the limit is 20 Mb. I googled a lot and found a configuration settings, so I added a settings as below to both "dev.config.json" and "prod.config.json"
"express": {
"inputRequestLimit": "50mb"
}
Now from the log, it throws:
2018-09-14T00:21:40.593Z - error: Error during processing request: http://172.20.42.42:3000/api/report details: request aborted Error: request aborted
at IncomingMessage.onAborted (C:\Websites\Reports\node_modules\jsreport\node_modules\jsreport-express\node_modules\body-parser\node_modules\raw-body\index.js:270:10)
at emitNone (events.js:67:13)
at IncomingMessage.emit (events.js:166:7)
at abortIncoming (_http_server.js:284:11)
at Socket.serverSocketCloseListener (_http_server.js:297:5)
at emitOne (events.js:82:20)
at Socket.emit (events.js:169:7)
at TCP._onclose (net.js:486:12)
We have commercial licence. Can anyone help me how do I increase the request limit? If I did correctly, how can I avoid the "request aborted" error. I know the latest version of jsreport is 2.2, but it seems a big job to upgrade. So try upgrade would be my last choice.
Thanks in advance for any help.