Я хочу сохранить информацию трассировки в файлы .svclog, но только для неудачных запросов.Это возможно?Если да, то как именно?
У меня есть служба WCF, которая вызывается сотни раз в минуту.В редких случаях клиенты получат ошибку 500, которая происходит за пределами моего кода, работающего внутри WCF (обычно это проблемы безопасности).Я хотел бы точно знать, почему эти ошибки происходят и что их вызывает.
Я также хотел бы использовать инструмент Trace Viewer для проверки файлов .svclog.
НасколькоЯ могу сказать, у меня есть два варианта: 1) инструмент FERB отслеживания путем регистрации неудачных запросов через system.webServer \ настройки трассировки.К сожалению, мне действительно не нравится интерфейс IE trace-viewer, и при этом я не получаю достаточно информации из журналов трассировки, чтобы выяснить, почему произошла ошибка за пределами моего кода.
2) turnо глобальной трассировке в разделе system.diagnostics \ trace.В этом разделе создаются отличные журналы трассировки со всем, что я когда-либо хотел.Тем не менее, я не могу найти способ только захватить информацию для неудачных запросов.Этот раздел собирает информацию трассировки для ВСЕХ запросов.Мои журналы трассировки быстро заполняются!
Мои ошибки 500 периодически и редко.В конечном счете, я хочу, чтобы мой .svclog всегда включался, но он срабатывал только при сбое запросов.
Пожалуйста, сообщите, если это возможно?
Спасибо!
Редактировать:
Грэм, я последовал твоему совету и не вижу ожидаемых журналов.Вот соответствующие разделы из 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>
Вот ошибка клиента 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>
К сожалению, НИЧЕГО не зарегистрировано ни одним из слушателей трассировки.Журнал невыполненных запросов содержит следующее:
-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