2016-07-01 18 views
2

Wir verwenden Jaspersoft zum Generieren und Abrufen von Berichten. Dieser Server wird im internen Netzwerk (private IP-Adresse) ausgeführt. Wir haben einen Proxyserver (externer Server) in Web Api, um js und alle anderen Anfragen zu visualisieren. Dann leiten wir diese Anfrage an Jaspersoft Server weiter. Unsere approch ist unten angegeben:Jaspersoft: wie man js mit Proxy-Server (extern zu internal) aufrufen

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

Diese approch kann visualize.js erfolgreich herunterladen, aber wenn wir rufen visualize() Methode von visualize.js, für einige Anfrage Jaspersoft-Server Rückkehr 404-Not Found.

Antwort

3

Ich bin mir nicht sicher, warum der Fehler auftritt. Aber ich hoffe, das Problem ist, dass Sie HttpClient Objekt für jede Anfrage erstellen. Sie sollten dieses Objekt einmal erstellen und dieses Objekt verwenden. Versuchen Sie diese

//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; 
} 
+0

Lassen Sie mich versuchen und dann zurück zu Ihnen. –