public CloseDepartureResponseType CloseDeparture(CloseDepartureRequestType request, bool dumpXml)
        {
            WMSInterfaceClient client = new WMSInterfaceClient("BasicHttpBinding_IWMSInterface", _url);

            try
            {
                RenewTicket(false);
                request.Ticket = _ticket;

                if (dumpXml)
                {
                    new XMLHelper().DumpToFile(new XMLHelper().InterfaceClassToXml(request), LogFileName("DataToCentiro_CloseDeparture"));
                }

                CloseDepartureResponseType response = client.CloseDeparture(request);
                client.Close();

                if (dumpXml)
                {
                    new XMLHelper().DumpToFile(new XMLHelper().InterfaceClassToXml(response), LogFileName("DataFromCentiro_CloseDeparture"));
                }

                if (response.StatusCode == CentiroService.StatusCode.Ok)
                {
                    return(response);
                }
                else if (response.StatusCode == CentiroService.StatusCode.InvalidTicket)
                {
                    if (!_invalidTicketError)
                    {
                        RenewTicket(true);
                        _invalidTicketError = true;
                        return(CloseDeparture(request, dumpXml));
                    }
                    else
                    {
                        return(response);
                    }
                }
                else
                {
                    Tracing.TraceEvent(TraceEventType.Error, 0, String.Format("Error for Close Departure .\nError status = {0}\nError Message = {1}",
                                                                              response.StatusCode, GetErrorString(response.StatusMessages)));
                    throw new CentiroServiceAgentException(String.Format("Error for Close Departure .\nError status = {0}\nError Message = {1}",
                                                                         response.StatusCode, GetErrorString(response.StatusMessages)));
                }
            }

            catch (CommunicationException)
            {
                Tracing.TraceEvent(TraceEventType.Error, 0, "Error calling CloseDeparture.");
                client.Abort();
                throw;
            }
            catch (TimeoutException)
            {
                Tracing.TraceEvent(TraceEventType.Error, 0, "Error calling CloseDeparture.");
                throw;
            }
        }
        private void RenewTicket(bool verify)
        {
            // Ticket valid 4 hours
            if ((DateTime.Now.Subtract(_ticketTimeStamp) < TimeSpan.FromHours(3.9)) & !verify)
            {
                return;
            }

            Tracing.TraceEvent(TraceEventType.Verbose, 0, "Aquiring a new authorization ticket.");
            WMSInterfaceClient client = new WMSInterfaceClient("BasicHttpBinding_IWMSInterface", _url);

            try
            {
                CentiroService.AuthenticateResponseType authResponse = client.Authenticate(_authRequest);
                client.Close();

                _ticket = authResponse.Ticket;


                if (string.IsNullOrEmpty(_ticket))
                {
                    Tracing.TraceEvent(TraceEventType.Error, 0, "Failed to aquire a new authorization ticket. Check user and password settings.");
                    throw new CentiroServiceAgentException("Failed to aquire a new authorization ticket. Check user and password settings.");
                }
                else
                {
                    _ticketTimeStamp    = DateTime.Now;
                    _invalidTicketError = false;
                    Tracing.TraceEvent(TraceEventType.Verbose, 0, "Successfully authorized.");
                }
            }
            catch (CommunicationException)
            {
                Tracing.TraceEvent(TraceEventType.Error, 0, "Error while attempting to aquire new authorization ticket.");
                client.Abort();
                throw;
            }
            catch (TimeoutException)
            {
                Tracing.TraceEvent(TraceEventType.Error, 0, "Error while attempting to aquire new authorization ticket.");
                client.Abort();
                throw;
            }
        }