private static void SafeCloseClient(Proxy client, string logRef) { // this approach modeled on http://msdn.microsoft.com/en-us/library/aa355056.aspx // Bottom line is that calling Dispose() on a client causes Close() to be called, // and Close() can throw exceptions (see below). So don't dispose one without first // calling Close() and handling the network-related exceptions that might happen. try { client.Close(); } catch (System.ServiceModel.CommunicationException x1) { System.Diagnostics.Trace.WriteLine(string.Format("SafeCloseClient: A CommunicationException occured when closing the web service proxy client: {0}.\r\n" + "Stack Trace: {1}", x1.Message, x1.StackTrace)); client.Abort(); } catch (TimeoutException x2) { System.Diagnostics.Trace.WriteLine(string.Format("SafeCloseClient: A TimeoutException occured when closing the web service proxy client: {0}.\r\n" + "Stack Trace: {1}", x2.Message, x2.StackTrace)); client.Abort(); } catch (Exception x3) { System.Diagnostics.Trace.WriteLine(string.Format("SafeCloseClient: A general exception occured when closing the web service proxy client: {0}.\r\n" + "Stack Trace: {1}", x3.Message, x3.StackTrace)); client.Abort(); throw; } }