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;
     }
 }