Я столкнулся с проблемой в моем приложении С# webservice. Исключения больше не обрабатываются в определенный момент. Приложение просто останавливается без каких-либо дополнительных исключений для сообщений/сбоев. Вот что происходит:
Проблема:
- в секции catch метода, я бросаю новое Исключение, содержащее дополнительная информация об исключении;
- основное исключение исходит из другой части моего приложения; "стек" исключений составляет около 20, но это, похоже, не здесь проблема;
- при использовании сервера разработки VS2012 (предположим, что это 32 бит) или IIS в 32-битном режиме, выбранное исключение подбирается вызывающим методом, как ожидалось (наконец, в результате возникает исключение FaultException моего веб-сервиса)
Шаги, которые я использовал до сих пор или другую информацию, которая может быть полезна:
- Я могу легко воспроизвести исключение; он просто перестает работать на точно такая же точка каждый раз, когда я запускаю свой код. К сожалению, мой проект слишком велик/сложный, чтобы представить его здесь.
- Сначала я предполагал различия между сервером разработки VS2012 с одной стороны и IIS, а с другой - причиной моей проблемы. Однако, когда я настраиваю пул приложений как 32 бит в IIS, все работает нормально. Это приводит к переходу на 64 бит.
- Использование памяти не кажется проблемой; в моем приложении я использую (большие) входные файлы xml. Изменения в (размерах) этих файлов не имеют влияние на мою проблему.
- Я пробовал использовать диагностические инструменты, предоставляемые для веб-сервисов. Мне это не очень помогает, так как я вижу, что происходит (или я должен сказать не происходит) при отладке моего приложения в VS2012;
И вот оно! Мой исходный код выглядит следующим образом:
try
{
//some code here throws an exception
}
catch (Exception ex)
{
throw new Exception("some message", ex); //after this line no activity anymore
}
Когда я меняю это на:
Exception myex = null;
try
{
//some code here throws an exception
}
catch (Exception ex)
{
myex = new Exception("some message", ex);
return null;
}
finally
{
if (myex!=null) throw myex;
}
моя проблема решена!? У кого-нибудь есть объяснение этого поведения? Я надеюсь, что я буду использовать обычные механизмы обработки исключений.
Еще одно замечание: когда я добавляю "throw new Exception()" перед разделом try {}, мой код работает отлично (но, конечно, я этого не хочу).
Кто-нибудь подскажет? Спасибо заранее!