Безмолвное исключение поймано IntelliTrace

Добрый день,

Я сталкиваюсь с любопытной проблемой с WCF и IntelliTrace. У меня есть приложение, которое я тестирую, используя локальную конечную точку WCF (сервер разработки, встроенный в VS2010) с использованием basicHttpBinding. Приложение работает нормально: в приложение не попадают исключения, и все вызовы WCF возвращают данные.

В общем, я решил взглянуть на вывод IntelliTrace и заметил, что мой первый вызов WCF выбрасывает два исключения:

Exception:Thrown: "No connection could be made because the target machine actively refused it" (System.Net.Sockets.SocketException)
A System.Net.Sockets.SocketException was thrown: "No connection could be made because the target machine actively refused it"
Exception:Caught: "No connection could be made because the target machine actively refused it" (System.Net.Sockets.SocketException)
A System.Net.Sockets.SocketException was caught: "No connection could be made because the target machine actively refused it"

Я сократил приложение до тривиального варианта использования:

    ServiceClient client = new ServiceClient();
    string[] output = client.LegacyCheck("username");
    Console.WriteLine(output[0]);
    Console.WriteLine(client.GetData(65));

И я получаю такое же поведение. Второй вызов не имеет исключений, связанных с ним.

Я очень озадачен. Если в соединении отказано, то почему исключение не попадает в приложение? И с чего бы это успех после 2 неудачных попыток?

Любая помощь приветствуется!

1 ответ

Решение

Что бы это ни стоило, я также заметил такое поведение с моими приложениями IronPython/WPF. В конце концов я понял, что Intellitrace просто показывает вам ВСЕ исключения, которые вызываются и перехватываются во время нормальной работы, даже если он является частью BCL или другой библиотеки.

Конечно, вам нужно беспокоиться только о необработанных исключениях (после того, как они прервут ваше выполнение, вы, как правило, увидите их в IntelliTrace как длинную цепочку Thrown: Caught: Thrown: Caught:.... вплоть до Thrown: которая будет последней строкой, поскольку исключение не было перехвачено.

Я готов поспорить, что код WCF tryСначала пара вещей, перехватывает SocketExceptions, а затем продолжает свой веселый путь. Вы бы никогда этого не увидели, кроме IntelliTrace:)

Другие вопросы по тегам