Безмолвное исключение, пойманное IntelliTrace - PullRequest
2 голосов
/ 20 октября 2010

Добрый день,

Я столкнулся с любопытной проблемой с 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 Ответ

3 голосов
/ 20 октября 2010

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

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

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

...