tags:

views:

73

answers:

2

Hi there,

I'm using WCF client like this...

var client = new TestClient();
try
{    
    response = service.Operation(request);
}
finally
{    
    try
    {
        if (client.State != CommunicationState.Faulted)
            client.Close();
    }
    catch (Exception)
    {
        client.Abort();
    }
}

but from time to time I get 500 HTTP error which is the only answer I get for next 15 minutes, then everything is back to normal for 15 minutes and so on. I know there is some load balancing stuff going on service side but guys there can't find any problems with it.

That's why I started wondering am I using WCF service correctly. I already made a mistake once when I was using "using" to close service connection and I'm afraid I doing something wrong again.

So can anybody say whether my way of calling WCF service is correct or not in all (event the most rare) circumstances?

A: 

Use this to enable trace logging on the service

  <system.diagnostics>
      <sources>
            <source name="System.ServiceModel" 
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
            <listeners>
               <add name="traceListener" 
                   type="System.Diagnostics.XmlWriterTraceListener" 
                   initializeData= "c:\logs\Traces.svclog" />
            </listeners>
         </source>
      </sources>
   </system.diagnostics>

Fiddler may also help, also just trying to grab the WSDL through a web browser during those 15min.

Bobby
+1  A: 

I would suggest:

var client = new TestClient();
try
{    
    response = client.Operation(request);
    client.Close();
}
catch
{
    client.Abort();
}

The way you're doing, you're not aborting if something goes wrong, since your catch is inside the finally block. If you want to use the code you have today, I think you need to change it to:

var client = new TestClient();
try
{    
    response = client.Operation(request);
}
finally
{    
    try
    {
        if (client.State != CommunicationState.Faulted)
            client.Close();
        else
            client.Abort(); // Abort if the State is Faulted.
    }
    catch (Exception)
    {
        client.Abort();
    }
}
Wagner Silveira