2012-04-12 13 views
1

In der Anwendung, an der ich gerade arbeite, gibt es eine Backend-Java-App, die eine Reihe von Daten zwischenspeichert. Der asp.net Teil erlaubt Benutzern, Datenbanktabellen zu aktualisieren. Jedes Mal, wenn die Datenbank aktualisiert wird, sollte der Cache in der Java-Anwendung gelöscht werden. Also im Grunde habe ich eine Liste von 4 URLs, die jeweils getroffen werden müssen, um den Cache zu löschen. Meine grundlegende Lösung war, jede URL durchzulaufen und eine HttpWebRequest zu erstellen und dann die Antwort zu bekommen. Also im Grunde habe ich dies für jede Anforderung:HttpWebRequest Hanging

var request = (HttpWebRequest)WebRequest.Create(url); 
       request.Method = "POST"; 
       request.ContentLength = 0; 

       using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
       { 
        Stream receiveStream = response.GetResponseStream(); 
        StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
        string responseString = readStream.ReadToEnd(); 

        returnList.Add(string.Format("Refresh response from {0}.<br />{1}", url, responseString)); 

        readStream.Close(); 
        receiveStream.Close(); 
       } 

auf meinem lokalen Rechner alles funktioniert super. Aber wenn ich auf unserem Entwicklungsserver bereitstellen, hängt es einfach und macht nichts. Wenn ich request.ContentLength = 0; entferne, löst der Remote-Server einen erwarteten 411: Length-Fehler aus.

Ich bin wirklich hier fest und jede Hilfe würde sehr geschätzt werden.

Entweder eine Lösung für das HttpWebRequest-Problem, das ich habe oder eine andere Lösung zum Aufruf jeder URL würde funktionieren, ich bin nicht wählerisch.

Vielen Dank im Voraus.

Antwort

0

Ziemlich sicher, dass dies ein Netzwerkproblem war. Ich habe versucht, eine andere URL (den Load Balancer) zu treffen und hatte keine Probleme, so dass die Java-Leute Änderungen vornehmen, so dass ich einfach den Load Balancer drücken kann und auf welchem ​​Server die Anfrage endet, wird sichergestellt, dass alle Server-Caches gelöscht werden.

Der Code, der funktioniert:

var request = (HttpWebRequest)WebRequest.Create(url); 

      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       Stream receiveStream = response.GetResponseStream(); 
       StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
       string responseString = readStream.ReadToEnd(); 

       returnString = string.Format(@"Refresh response from<br />{0}{1}", url, responseString); 

       readStream.Close(); 
       receiveStream.Close(); 
      } 
0

Warum verwenden Sie request.method als "POST"? Veröffentlichen Sie keine Daten, versuchen Sie nicht, die Inhaltslänge und die Request-Methode zu entfernen.