tags:

views:

40

answers:

1

Hi,

In my application, I am using client.open and client.close to open a WCF proxy channel, use the wcf method and finally close it. I do this is several parts of my Windows Forms application.

However, I have noticed that client.close does not necessarily close the connection immediately. Why is this? Should I use client.Abort instead?

Am I using the WCF client the right way? i.e. clien.open -> call WCF method -> client.close.

Thanks for any help in advance!

Subbu

A: 

The .Close() method will try to close the connection gracefully, e.g. a pending call will still be finished by the server, and only after that's done, the connection is terminated. Use this whenever possible - it's the gentle and preferred way of closing a client connection.

.Abort() really just tears down the communication channel - not matter whether a call is still in progress or not. It's the ultimate, last resort escape hatch, if .Close() failed.

As a best practice, I would wrap my service calls into a try...catch block, something like this:

try
{
    myServiceClient.CallSomeMethod();
    myServiceClient.Close();
}
catch(FaultException<SomeError>)
{
    myServiceClient.Abort();
}
// possibly other catch clauses, too - call .Abort() inside them
catch(CommunicationException)
{
    myServiceClient.Abort();
}
marc_s
Thanks. This gives me good guidance. I have marked your answer
Subbu