Как обрабатывать исключения в обратном вызове службы wcf - PullRequest
2 голосов
/ 25 января 2012

Я пытаюсь зарегистрировать мои исключения с помощью AppDomain.CurrentDomain.UnhandledException.

AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException;
public static void AppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
        HandleException(e.ExceptionObject as Exception);
}

Когда я получаю исключение на сервере, я получу ошибку в клиенте во время отладки, но событие, подключенное к AppDomain.CurrentDomain.UnhandledException, никогда не будет запущено.

Сервер:

[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
public class Service : IService
{        

    public string GetError()
    {
       throw new ApplicationException();
    }
}

Клиент:

public void GetError()
{
   this.service.BeginGetError(OnGetErrorCompleted, null);
}

public void OnGetErrorCompleted(IAsyncResult result)
{ 
    var value = this.service.EndGetError(result);
}

Это не работает, если я не использую Distpacher.BeginInvoke ..

public void OnGetErrorCompleted(IAsyncResult result)
{
    this.Dispatcher.BeginInvoke((Action)(() =>
    {
        var value = this.service.EndGetError(result);
    }));           
}

Кто-нибудь знает почему ?? Я думал, что AppDomain.CurrentDomain.UnhandledException будет запущен в случае исключения в ЛЮБОМ потоке! : S

1 Ответ

0 голосов
/ 25 января 2012

Лучшее решение - использовать что-то вроде IErrorHandler и выдавать FaultExceptions.Украсьте свои операции для создания исключений FaultException, используя атрибут FaultContract .Теперь вы можете поймать определенные FaultExceptions на клиенте.Вы не должны предоставлять клиенту исключения на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...