Je souhaite enregistrer les informations de trace dans les fichiers .svclog, mais uniquement pour les demandes ayant échoué. Est-ce possible? Si oui, avec quelle précision?Traçage WCF de SEULEMENT des demandes échouées?
J'ai un service WCF qui est appelé des centaines de fois par minute. En de rares occasions, les clients recevront une erreur 500 qui survient en dehors des limites de mon code qui s'exécute dans WCF (généralement des problèmes de sécurité). J'aimerais savoir exactement pourquoi ces erreurs se produisent et quelle est leur cause.
Je voudrais aussi vraiment utiliser l'outil Trace Viewer pour examiner les fichiers .svclog. Pour autant que je sache, j'ai deux options: 1) instrument de traçage FERB en enregistrant les demandes ayant échoué via les paramètres system.webServer \ tracing. Malheureusement, je n'aime vraiment pas l'interface de l'IE-trace-viewer, et je ne reçois pas assez d'informations de la trace-logs pour comprendre pourquoi une erreur en dehors de mon code s'est produite. 2) activer le suivi global sous la section system.diagnostics \ trace. Cette section produit de superbes journaux de trace avec tout ce que je peux capturer. Cependant, je ne peux pas trouver un moyen de capturer seulement l'information pour les demandes échouées. Cette section capture les informations de trace pour TOUTES les demandes. Mes journaux de suivi se remplissent rapidement!
Mes erreurs 500 sont intermittentes et rares. En fin de compte, je veux toujours avoir mon .svclog suivi ON, mais seulement avoir kick dans quand les demandes échouées se produisent.
S'il vous plaît, si possible?
Merci!
Edit:
Graham, J'ai suivi vos conseils et je ne vois pas les journaux je pense. Voici les sections pertinentes du web.config:
<system.diagnostics>
<trace>
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
<filter type="" />
</add>
</listeners>
</trace>
<sources>
<source name="System.ServiceModel" switchValue="Error">
<listeners>
<add name="wcfTracing"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="Traces1.svclog"/>
<add name="log4netTracing"
type="AzureWatch.Model.Service.Log4netTraceListener,AzureWatch.Model.Service"/>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Error">
<listeners>
<add name="wcfTracing"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="Traces2.svclog"/>
<!--<add name="log4netTracing"
type="AzureWatch.Model.Service.Log4netTraceListener,AzureWatch.Model.Service"/>-->
</listeners>
</source>
</sources>
</system.diagnostics>
<!-- ... -->
<diagnostics wmiProviderEnabled="true">
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxSizeOfMessageToLog="1000000"
maxMessagesToLog="-1" />
</diagnostics>
Voici l'erreur client de WCF:
<Exception>
<Type>System.Net.Sockets.SocketException</Type>
<Message>An existing connection was forcibly closed by the remote host</Message>
<StackTrace>
<Frame>at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)</Frame>
</StackTrace>
</Exception>
Malheureusement, il n'y a rien qui est connecté soit par des oligo-auditeurs. des demandes ayant échoué journal contient ceci:
-GENERAL_READ_ENTITY_END
BytesReceived 0
ErrorCode 2147943395
ErrorCode The I/O operation has been aborted because of either a thread exit or an application request. (0x800703e3)
Warning
-MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 400
HttpReason Bad Request
HttpSubStatus 0
ErrorCode 0
ConfigExceptionInfo
Notification EXECUTE_REQUEST_HANDLER
ErrorCode The operation completed successfully. (0x0)
0 msInformational
je suggère d'utiliser le niveau d'alerte au moins initialement jusqu'à ce que vous ayez cloué l'erreur. – softveda
@ Pratik- sonne assez bien - qu'est-ce qui déclencherait un avertissement? Je peux voir que lancer une exception signifierait une erreur ... –
Parfois, des événements d'avertissement peuvent apparaître avant l'erreur réelle et donner des indications supplémentaires sur l'erreur. – softveda