Исключение .NET не передается из класса в основную программу - PullRequest
0 голосов
/ 10 января 2010

Я создал простое консольное приложение, используя C #. Он создает экземпляр класса и вызывает один из методов класса. Этот метод содержит блок try-catch для перехвата исключений типа System.Net.WebException и его повторного выброса, чтобы основной метод мог перехватить его и действовать соответствующим образом. Когда я выполняю скомпилированное приложение, исключение не передается в основной класс, и пользователь никогда не увидит мое пользовательское сообщение об ошибке. Вместо этого появляется этот экран, сообщающий, что было необработанное исключение WebException (оно на немецком языке, но я думаю, что его можно распознать в любом случае; -)):

альтернативный текст http://img29.imageshack.us/img29/4581/crapq.png

Это метод внутри моего класса с именем BuffaloRouter:

    public void Login()
    {
        string sUrl = _sUrl + "/somestuff.htm";
        HttpWebRequest request = (HttpWebRequest) WebRequest.Create(sUrl);
        CredentialCache credCache = new CredentialCache();
        credCache.Add(new Uri(sUrl), "Basic", _credential);
        request.Credentials = credCache;

        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream receiveStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
            _sContent = reader.ReadToEnd();

            response.Close();
            receiveStream.Dispose();
            reader.Dispose();

            _parseSessionIds();
        }
        catch (WebException)
        {
            throw;
        }
    }

И это метод внутри моего основного класса:

    private static bool _login()
    {
        _router = new BuffaloRouter(_sIP, new System.Net.NetworkCredential("root", _sPassword));

        try
        {
            Console.WriteLine("Login...");
            _router.Login();
            return true;
        }
        catch (System.Net.WebException)
        {
            _showErrorMessage("Could not connect to " + _sIP);
            return false;
        }
    }

UPDATE: Я чувствую себя более чем смущенным и предпочел бы не говорить об этом. Но, как несколько раз, прежде чем я не посмотрел на то, что я делал ;-) Метод внутри основного класса даже не вызывался, когда я запускал приложение. У того, который был вызван, не было блока try-catch, поэтому исключение, выброшенное в методе моего класса, заставляло приложение делать то, что предполагалось, т.е. CRASH !! Я тупой, извини, что потратил впустую время.

Ответы [ 2 ]

4 голосов
/ 10 января 2010

Если все, что вы делаете, это перебрасываете исключение, то вам не нужно его перехватывать. Просто удалите try...catch из вашего Login метода.

Сделав это, временно отредактируйте ваш код, чтобы отловить общее исключение и отладить его, чтобы выяснить, какое исключение действительно вызывается. Сделав это, отредактируйте код еще раз, чтобы перехватить это исключение (и только это исключение).

1 голос
/ 10 января 2010

Как указал ChrisF, вам не нужно сбрасывать ошибку в методе Login. Если ваш блок catch не работает в методе _login, то я думаю, что вы не перехватили правильное исключение.

Вы уверены, что получили System.Net.WebException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...