Ich habe das Problem, dass mir mein Programm manchmal eine StackOverFlowException (durch rekursiven Methodenaufruf) wirft, wenn ich die .exe meines Programmes ausführe. Öffne ich mein Projekt und starte dann das Programm, kam bisher noch nie eine Fehlermeldung, ich frage mich auch wieso eine kommen soll, denn normalerweise müsste doch die StackOverFlowExcetion mit in dem Code abgefangen werden oder?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| static public string GET(string url) { string html;
try { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.CookieContainer = cookiecontainer; request.UserAgent = useragent; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream()); html = sr.ReadToEnd().Replace("&", "&"); Console.WriteLine(url); return html; } catch (Exception ex) { if (ex.Message == "The operation has timed out" || ex.Message == "Der Remoteserver hat einen Fehler zurückgegeben: (403) Unzulässig.") return GET(url); else return ""; } } |
Ich möchte den Code gerne optimal haben. Mein Programm greif auf einen Server zu und wenn zu viele Anfragen gemacht werden, kann es passieren, dass "(403) unzulässig" zurückkommt, also wird die Methode erneut aufgerufen und das klappt dann meistens auch beim 2. Mal. Es muss aber scheinbar noch bei anderen Dingen (403) als Fehler kommen, wodurch meine Methode immer und immer wieder GET aufruft und die Exception kommt.
Wie unterscheide ich nun die beiden Fehler? Oder was kann ich an der Methode verbessern, dass nur wenn der Server wirklich nicht erreichbar ist, nichts zurückgegeben wird?