As a first-response, I would try enabling tracing. You'd be surprised what kind of detail these can provide, especially in a diagnostic manner. It's also very simple and doesn't involve any recompilation:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="sdt"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "SdrConfigExample.e2e" />
</listeners>
</source>
</sources>
</system.diagnostics>
And if you use Verbose
logging, you'll get debug-level logging of almost every event going on. Then use SvctraceViewer
to go back and audit these logs.
Beyond that, look in to using the Trace.*
methods within your service to provide any additional level of detail you may need (like calls to and from the database). Depending on how you set the up service, you can probably also look in to a debugger that plugs right in to your database context and outputs when it makes calls to and from.