2010-08-05 6 views
0

J'ai une page aspx qui, sur un clic de bouton, crée une instance d'un objet serviceRefernece. Dans le code derrière pour ma page j'ai l'appel enveloppé dans un try/catch. Le fichier svc référencé utilise à peu près le même modèle. Il appelle un client interne sur net.tcp. L'appel est enveloppé dans un try/catchComment puis-je générer une exception à mon interface utilisateur?

 try 
     { 
      var client = new InternalServiceClient(); 
      var response = client.GetActiveVerification(request); 
      client.Close(); 
      return response; 

     } 
     catch (FaultException fe) 
     { 
      LogError(MethodBase.GetCurrentMethod().Name, fe); 
      throw; 
     } 

Voici mon problème, comment puis-je obtenir des erreurs ici à bouillonner jusqu'à ma déclaration de capture de l'interface utilisateur? Quand je le laisse comme ça, je reçois une erreur d'exception non gérée de Visual Studio. J'ai essayé de supprimer le throw qui me fait spécifier une valeur de retour, et je renvoie null. Cela rend l'interface utilisateur ne fonctionne pas correctement. J'ai essayé throw new Exception(fe.message) et je reçois le même problème avec l'exception non gérée. Fondamentalement, ma question est de savoir comment puis-je accomplir ce dont j'ai besoin? Qu'est-ce que je rate?

+0

L'exception non gérée semble que cela se produit sur un limite de service, d'où la raison pour laquelle Visual Studio va l'attraper. Est-ce que Visual Studio ne vous laissera pas continuer l'exécution? Je suppose que votre gestionnaire catch catch catch (Exception ex) 'ou catch (FaultException ex)' ne s'exécute jamais? – Rabid

Répondre

1

Vous avez besoin d'un bloc try/catch séparé autour de votre bloc try/catch. Vous l'avez tel que vous allez attraper une FaultException et n'importe quel type d'Exception, mais votre bloc Exception n'attrapera pas votre jet de FaultException. Donc, enfermez simplement ceci avec un autre try/catch ou manipulez-le dans la capture FaultException et dans la capture Exception.

+0

Vous pouvez également supprimer le gestionnaire 'catch (FaultException ex)' sur la page ASPX, en fonction des critères de journalisation. – Rabid

0

La raison peut être le lancement d'une autre exception dans votre second extrait de code qui n'est pas du type FaultException; une telle exception passerait comme non traitée dans cette situation. Peut-être que vous devez ajouter un autre bloc catch à votre deuxième extrait de code qui attire des exceptions du type Exception:

catch (FaultException fe) 
    { 
     LogError(MethodBase.GetCurrentMethod().Name, fe); 
     throw; 
    } 

    catch (Exception ex) 
    { 
     throw; 
    } 
0

Est-ce que le FaultException relance un type générique? Les classes pertinentes détaillées par les attributs FaultContract sont-elles accessibles à tous les assemblys de cette pile d'exécution?

Edit: Dans votre premier extrait de code ...

catch (FaultException ex) 
    { 
     LogError(ex, MethodBase.GetCurrentMethod().Name); 
     throw; 
    } 

Si l'erreur se produit sur la non prise en charge déclaration throw de ce gestionnaire, alors @MCain est juste.

-2

Je crois que vous devez jeter dans le bloc catch pour l'erreur à bouillonner

try 
{ 
} 
catch (SqlException _SqlException) 
{ 
    //Log Error to file 
    throw; 
} 
catch (IOException _IOexception) 
{ 
    //Log Error to file 
    throw; 
} 
catch (Exception _exception) 
{ 
    //Log Error to file 
    throw; 
} 

Ce genre d'un bloc sera dans la méthode d'appel

+0

-1: C'est exactement ce que le PO a –

Questions connexes