We are using Jaspersoft to generate and retrieve report. This server is running in internal network (private IP address). We have a proxy server (external server) in Web Api to receive visualize js and all other request. Then we forward this request to Jaspersoft server. Our approch is given below:
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken) {
var uriBuilder = new UriBuilder(request.RequestUri);
uriBuilder.Host = "internal address";
request.RequestUri = uriBuilder.Uri;
if (request.Method == HttpMethod.Get) {
request.Content = null;
}
var response = await new HttpClient().SendAsync(request,
HttpCompletionOption.ResponseHeadersRead, cancellationToken);
return response;
}
This approch can download visualize.js successfully, but when we call visualize()
method from visualize.js, for some request jaspersoft server returning 404-Not Found
.
I am not sure why the error occurs. But I hope the problem is you are creating HttpClient
object for every request. You should create this object once and use this object. Try this
//Initiate HttpClient object here
private HttpClient _client = new HttpClient();
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken) {
var uriBuilder = new UriBuilder(request.RequestUri);
uriBuilder.Host = "internal address";
request.RequestUri = uriBuilder.Uri;
if (request.Method == HttpMethod.Get) {
request.Content = null;
}
var response = await _client.SendAsync(request,
HttpCompletionOption.ResponseHeadersRead, cancellationToken);
return response;
}