Проблема с обработкой исключений в WCF, попробуйте ловить не работает - PullRequest
2 голосов
/ 21 июля 2011

У меня есть служба wcf (nettcpbinding, duplex), которая работает очень хорошо.сегодня я столкнулся с очень странной проблемой.следующий код работает нормально, и если "new A (" 123 ");"выдает исключение, оно перехватывается.

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class Service: ITestService
{

  // the interface is defined as [OperationContract(IsOneWay = true)], so fire and forget
  public void Test()
  {
    try
    {
         var t = new A("123");
    }
    catch(Exception ex)
    {}

  }
}

НО, если я изменяю A.dll и изменяю параметры метода, я ожидаю получить MissingMethodException.Что я получаю, так это ничего от WCF :( Служба WCF просто прерывается, и на стороне клиента я получаю событие Faulted для моего канала WCF.

Так почему мой перехват не работает? WCF обрабатывает такие исключения на другомспособ?

спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Ошибка не возникает в тот момент, когда вы создаете A, она происходит при компиляции JIT метода Test, который находится за пределами вашего блока try / catch.

Если вы переместите создание A в другой метод и вызовете его из своего блока try, вы поймаете исключение

Примерно так

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
public class Service: ITestService
{

  // the interface is defined as [OperationContract(IsOneWay = true)], so fire and forget
  public void Test()
  {
    try
    {
         var t = GetA("123");
    }
    catch(Exception ex)
    {}

  }

  private A GetA(string s)
  {
      return new A(s);
  }
}
2 голосов
/ 21 июля 2011

Попробуйте включить вход в службу WCF и посмотрите журнал. Некоторые исключения невозможно отловить в методе WCF или клиентском коде WCF, но они перехватываются платформой WCF и могут быть обнаружены только при ведении журнала.

...