How to debug a WCF service connected with multiple clients - .NET - wcf

I've written a WCF service with a duplex contract which asynchronously calls back the clients. I have some issues when multiple clients get connected and i dono how to debug the service. Any insights on this?
Thank you.
NLV

A bit more info on what your problem is would be helpful, but to get you started try enabling diagnostics. Add the following to your service config and set "initializeData" to set where the log file is written. Opening the file should launch Microsoft Service Trace Viewer. You can do the same on the client side. If you have both a service log and client log in Trace Viewer go to Menu -> Add and select the other file. You will then get the message interactions matched up in the graph tab.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel"
switchValue="Verbose">
<listeners>
<add name="sdt"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="D:\wcfLog.svcLog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
More info here: Tracing

Related

WCF Trace for single URL

We have a WCF-based backend API implementation. We are dealing with a production problem, and we need to investigate just a single service erroneous behavior.
We need to get WCF Trace logs, but since the system is heavily stressed, we expect that activation for the whole application cannot be done.
What we need is to enable WCF tracing for selectively chosen URL (a single service).
We tried with the location element - to get the configuration applied only for particular folder/file.svc, but this does not work. Still we had to enable WCF Tracing for the whole IIS Application to get the traces generated.
Any idea how to enable WCF Tracing for a single service ?
WCF tracing is built on top of System.Diagnostics. You should define trace sources in the configuration file or in code for using trace like this:
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Also you can refer to this docs for further info.

SignalR Scaleout with Redis

http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-with-redis
I followed this link to scaleout my simple signalr chat visual studio project.
I made my ubuntu virtual mchine on azure which runs redis.
I added GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName"); to my startup class and right now I am only testing it on my machine , not other servers.
But it does not work.
As soon as I put in that line my chat program gets stuck at line 1(see below) and never reaches line 2.
1)$.connection.hub.start().done(function () {
2) $('#sendmessage').click(function () {
What am I doing wrong?
It's best to setup server and client-side logging. This page details it http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-in-signalr.
Let us know you're results and maybe we can help...
So after 2 months someone asked for more detail... so here's it copied and pasted
Enabling Tracing For SignalR Scaleout
To enable tracing for the backplanes, add the following sections to the web.config file, under the root configuration element:
<configuration>
<system.diagnostics>
<sources>
<source name="SignalR.SqlMessageBus">
<listeners>
<add name="SignalR-Bus" />
</listeners>
</source>
<source name="SignalR.ServiceBusMessageBus">
<listeners>
<add name="SignalR-Bus" />
</listeners>
</source>
<source name="SignalR.ScaleoutMessageBus">
<listeners>
<add name="SignalR-Bus" />
</listeners>
</source>
</sources>
<switches>
<add name="SignalRSwitch" value="Verbose" />
<!-- Off, Critical, Error, Warning, Information, Verbose -->
</switches>
<sharedListeners>
<add name="SignalR-Bus"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="bus.log.txt" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
. . .
</configuration>
You need to enable pub/sub channel on redis server.
Steps:
Open redis.windows.conf file
Go to the Event notification section
Add or uncomment notify-keyspace-events E
Restart redis server.

wcf message logging uploading files

I'm sending files from clients to a server using WCF with different bindings. I need to know the sizes of the packets that the client send. How should I configure diagnostics in the config?? Or how can I view this?? Thanks.
To enable diagnostics, edit .config file
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="sdt" type="System.Diagnostics.XmlWriterTraceListener" initializeData="App_Data\WCF.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
Then you can open .svclog file with Microsoft Service Trace Viewer
See also:
Configuring Tracing at MSDN
Administration and Diagnostics at MSDN
Configuring Message Logging at MSDN

Is there a way to do on demand flushing of WCF trace?

Just like there is a command to flush IIS7 logs:
netsh http flush logbuffer
I'm wondering is there a similar command to flush WCF trace log on demand.
Setting the autoflush="true" in your .config file ensures that the trace sources flush to disk after each trace.
The following is a sample configuration file with autoflush="true":
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" type="System.Diagnostics.XmlWriterTraceListener"
initializeData="e2eTraceTest.xml" />
</listeners>
</source>
</sources>
<trace autoflush="true" />
</system.diagnostics>
</configuration>
In addition, if by any chance you are willing to store your WCF trace in a database, you might want to check out this post:
Stack Overflow: How can I enable WCF logging so that it writes to a Database?'
This would allow you to view your WCF trace in real-time, without flushing it.
One way is to do an IIS reset, but this is only really an option when debugging on a developmnet box.

ASP.NET/WCF tracing does not work within Sharepoint

I configured message tracing for my WCF webservice like this:
<!--TRACING -->
<system.diagnostics>
<sources>
<source name="System.ServiceModel" switchValue="Verbose, ActivityTracing" propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="log_messages_verbose.log" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
This works fine on my development machine, it logs all messages and traces to an xml file.
Now when deploying the webservice as (sub) Webapplication inside a Sharepoint Webapplication, the service works fine but the trace file stays empty.
I checked the permission on the file, tried absolute file paths, but it still does not work.
Because the webservice is deployed as sub webapplication, it inherits the web.config settings from sharepoint. Could this be an issue? Does sharepoint somehow disable the normal tracing?
Any suggestions are welcome..
Assuming your web service is deployed to its own directory (so that it does not interfere with SharePoint), have you tried adding a web.config with the above trace config to that directory?
Otherwise as Shiraz suggests try adding the trace code to SharePoint's web.config.
I had the same issue. What worked for me was to use the "SvcConfigEditor.exe" tool on the SharePoint web.config. I probably did something wrong trying to do it without the tool. C:\inetpub\wwwroot\wss\VirtualDirectories\.
Do you have the possibility of copying this into sharepoint's web.config?
Also check in your event log for error messages.
Edit
Not sure what the default is for enabled, you could try setting it to true
<trace enabled="true" />
I had the same problem, then moved the section to the root web.config in C:\inetpub\wwwroot\wss\VirtualDirectories\80.
I had the same issue with log4net not working, and again moved it into the parent web.config file.
Both now work.