public static void CloseAfariaServiceGroups(GroupsServiceClient svcGroups)
 {
     try
     {
         if (svcGroups != null)
         {
             // Get the state of the service
             System.ServiceModel.CommunicationState commState = svcGroups.State;
             // If the service is faulted, we still need to abort
             if (commState == System.ServiceModel.CommunicationState.Faulted)
             {
                 svcGroups.Abort();
             }
             // If the state is not already closed or in the process of closing, we should close the context
             else if (commState != System.ServiceModel.CommunicationState.Closing ||
                 commState != System.ServiceModel.CommunicationState.Closed)
             {
                 // Get the context info to get the context ID, although we saved this in the context string variable
                 Groups.ContextInfo ci = svcGroups.GetContextInfo();
                 // Assure that there is a valid context ID
                 if (!string.IsNullOrWhiteSpace(ci.ContextId))
                 {
                     // Close the context
                     svcGroups.CloseContext();
                 }
                 // Now close the service
                 svcGroups.Close();
             }
             // If the channel is closing/closed, attempt to close out the context, but don't need to close state
             else
             {
                 // We will likely throw an exception here.
                 svcGroups.CloseContext();
             }
             svcGroups = null;
         }
     }
     catch (Exception ex)
     {
         // Just ouput the exception, proper handling should initiate a new service, initiate the context to the previous,
         // and then close out the context and service
         Console.WriteLine(ex.Message.ToString());
         logger.Error("Error while closing Device service", ex);
     }
 }