J'essaie de consigner mes exceptions avec AppDomain.CurrentDomain.UnhandledException.Comment gérer les exceptions dans le rappel de service wcf
AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException;
public static void AppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
HandleException(e.ExceptionObject as Exception);
}
Quand je reçois une exception dans le serveur je vais obtenir la faute dans le client au moment de la mise au point, mais l'événement accroché à AppDomain.CurrentDomain.UnhandledException ne sera jamais tiré.
Serveur:
[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
public class Service : IService
{
public string GetError()
{
throw new ApplicationException();
}
}
Client:
public void GetError()
{
this.service.BeginGetError(OnGetErrorCompleted, null);
}
public void OnGetErrorCompleted(IAsyncResult result)
{
var value = this.service.EndGetError(result);
}
Cela ne fonctionne pas si je l'utilise Distpacher.BeginInvoke ..
public void OnGetErrorCompleted(IAsyncResult result)
{
this.Dispatcher.BeginInvoke((Action)(() =>
{
var value = this.service.EndGetError(result);
}));
}
Quelqu'un sait pourquoi ?? Je pensais que AppDomain.CurrentDomain.UnhandledException serait déclenché en cas d'exception dans n'importe quel thread! : S
Je convertis déjà des exceptions en erreurs sur le serveur avec [ServiceBehavior (IncludeExceptionDetailInFaults = true)]. J'ai également essayé avec l'exception de bibliothèque de l'entreprise à la conversion de faute et en utilisant FaultContracts comme vous l'avez dit. Donc, je ne reçois pas d'exceptions sur le client, mais des fautes. –
Vous continuez d'exposer vos exceptions de serveur à votre client. Comment votre client est-il supposé gérer quelque chose qui s'est passé sur le serveur? N'utilisez pas 'IncludeExceptionDetailInFaults' mais utilisez quelque chose comme' IErrorHandler' pour fournir des erreurs. – diggingforfire