2012-01-25 6 views
2

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

Répondre

0

Une meilleure solution consiste à utiliser quelque chose comme IErrorHandler et lancer FaultExceptions. Décorez vos opérations pour lancer FaultExceptions en utilisant l'attribut FaultContract. Vous pouvez maintenant attraper des FaultExceptions spécifiques sur le client. Vous ne devez pas exposer les exceptions sur le serveur au client.

+0

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. –

+0

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

Questions connexes