Безмолвное исключение поймано 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:)