Search code examples
asp.net-web-api2jasperserver

Jaspersoft : how to call visualize js using proxy server (external to internal)


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.


Solution

  • 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;
    }