2010-07-29 13 views
1

J'ai un service wcf qui crée parfois des erreurs comme "Le message InnerException était 'Le nombre maximum d'éléments qui peuvent être sérialisés ou désérialisés dans un graphe d'objet est' 65536 '". Je sais comment résoudre ce problème particulier, mais maintenant je veux créer une trace qui enregistre seulement les erreurs (et les erreurs critiques) dans le journal.Pourquoi ne puis-je pas tracer juste des erreurs du côté service de mon WCF?

Le problème est que mon journal enregistre tout (y compris les appels réussis) ou rien du tout. Donc ma question est, quel est le problème avec mon web.config?

<system.diagnostics> 
    <trace autoflush="true" /> 
    <sources> 
     <source name="System.ServiceModel" propagateActivity="true" switchValue="Error"> 
      <listeners> 
       <add name="xml"> 
       </add> 
      </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add initializeData="C:\mylog.svclog" 
      type="System.Diagnostics.XmlWriterTraceListener" 
      name="xml" /> 
    </sharedListeners> 
</system.diagnostics> 

J'ai essayé avec toutes les différentes combinaisons de switchValue, mais aucun ne me donne le résultat que je veux (= erreurs de prises, mais les appels non réussis).

Est-ce que quelqu'un a une idée?

Répondre

1

Si vous avez besoin de la journalisation uniquement côté service, vous pouvez consulter l'interface IErrorHandler que vous pouvez ajouter à votre classe de service.

Cette interface exposera deux méthodes

public bool HandleError(Exception error) 

public void ProvideFault(Exception error, MessageVersion ver, ref Message msg) 

qui vous permettra de puiser dans toutes les exceptions qui se produisent sur le service côté - log ceux dans un fichier journal de votre propre, et vous devriez être bien.

+0

Ah oui, vous avez peut-être raison, peut-être qu'il est plus facile d'utiliser le traçage d'erreur normal, et de fusionner ces erreurs avec des erreurs du site web (que je stocke dans une base de données). – Pete

+0

J'ai essayé ceci et cela fonctionne très bien. (et j'ai également appris que globala.asax Application_Error ne peut PAS être utilisé à cette fin) – Pete