Я хотел бы смочь зарегистрировать информацию о сообщении в базе данных, и я пытаюсь решить, как лучше всего сделать это. Действительно ли возможно настроить WCF регистрирующиеся механизмы для записи в базу данных вместо файла?Спасибо.
У вас должны быть две вещи:
Для # 1 :
Сначала вам нужно включить трассировку в WCF - вам понадобится запись в
, которая включает трассировку:
<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="false"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog="300000"
maxSizeOfMessageToLog="200000"/>
</diagnostics>
</system.serviceModel>
Затем вам нужно настроить трассировку .NET как таковую:
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml" type="WcfTrace.Trace.WebTraceListener,WcfTrace.Trace" />
</sharedListeners>
</system.diagnostics>
Здесь, вместо WebTraceListener или других предопределенных слушателей вы также можете подключить свой собственный прослушиватель трассировки, ориентированный на базу данных.
Для № 2:
Вы, конечно, можете - написать свой собственный SqlTraceListener
- или вы можете использовать одно из многих готовых решений, например это здесь (загрузите код с Codeplex ).
Если вам не нужно все SOAP-сообщение, я бы предложил использовать log4net с индивидуальной реализацией IParameterInspector или IDispatchMessageInspector, потому что в этом случае вы можете писать в журнал только то, что вам нужно. В противном случае возьмите раствор marc_s.