Autor Beitrag
BlackMatrix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.06.10 00:57 
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?

ausblenden 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?


Zuletzt bearbeitet von BlackMatrix am Mo 19.07.10 13:13, insgesamt 1-mal bearbeitet
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Sa 05.06.10 09:02 
Moin,

ich würde sagen ja, das muss so "aufwendig" sein.(ist es doch garnicht). Alle anderen lösungen wären mindestens genau so "aufwendig"

_________________
Gruß
Christoph
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 05.06.10 10:44 
Der zweite catch-Block sieht mir nach Pokemon Exception Handling aus ("Gotta catch 'em all"). Erwartest du denn außer WebException noch irgendeine andere Exception? Dann führ sie explizit auf.

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.06.10 12:55 
..


Zuletzt bearbeitet von BlackMatrix am Mo 19.07.10 13:15, insgesamt 1-mal bearbeitet
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 05.06.10 13:25 
Ok, dann schlage ich folgendes vor:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
        catch (WebException ex)
        {
            if (ex.Status == WebExceptionStatus.Timeout)
                return html = GET(url);            
        }
        catch (IOException) { }
        return "";

_________________
>λ=
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.06.10 18:27 
..
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Mo 19.07.10 13:14 
Ich habe meinen Beitrag im ersten Post mal neu formuliert. Der Thread war einfach nichtssagend und deswegen habe ich es gleich hier reingemacht.

Weiß jemand Rat?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 19.07.10 14:28 
Was Du gemacht hast, ist absolut unerwünscht, weil die von anderen gegebenen Antworten nun komplett aus dem Zusammenhang gerissen sind und niemanden mehr nutzen. Nichtssagend ist der Thread erst durch Dein unangebrachtes Verhalten geworden!

Ich schließe hier mal. Erstelle bitte einen neuen Thread und halte Dich demnächst an die Regeln.

Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.