示例#1
0
        private void Synchronize()
        {
            if (log.IsDebugEnabled)
            {
                log.Debug("Synchronize:begin");
            }

            if (!CheckConnection(localConnection, "Local"))
            {
                return;
            }
            if (!CheckConnection(remoteConnection, "Remote"))
            {
                return;
            }

            log4net.GlobalContext.Properties["test"] = "123";

            syncAgent        = new SyncAgent();
            syncAgent.Local  = localConnection.GetSyncDatabase();
            syncAgent.Remote = remoteConnection.GetSyncDatabase();
            syncAgent.LocalToRemoteLinkId = linkInfo.LocalId;
            syncAgent.RemoteToLocalLinkId = linkInfo.RemoteId;
            syncAgent.StateChanged       += new SyncAgentStateChangedHandler(syncAgent_StateChanged);
            syncAgent.LocalFilters.AddRange(linkInfo.LocalFilters);
            syncAgent.RemoteFilters.AddRange(linkInfo.RemoteFilters);

            syncAgent.Name  = linkInfo.Name;
            syncAgent.Order = linkInfo.Order;

            //syncAgent.Local.Name = string.Format("{0} ({1})", linkInfo.Name, syncAgent.Local.Name);
            //syncAgent.Remote.Name = string.Format("{0} ({1})", linkInfo.Name, syncAgent.Remote.Name);

            syncAgent.SetLoggerName(log.Logger.Name);

            bool executionResult = syncAgent.Execute();

            if (executionResult)
            {
                log.Info("Сеанс синхронизации прошел успешно");
                if (failedCount > 0)
                {
                    // восстановление после ошибки
                    thread.Delay = linkInfo.SyncDelay;
                }
                failedCount = 0; // сброс счетчика ошибок
            }
            else
            {
                failedCount++;
                if (failedCount < linkInfo.LinkRetries)
                {
                    log.WarnFormat("Сеанс синхронизации завершен с ошибкой. Это {0} ошибочный сеанс. По достижении {1} ошибочных сеансов связь будет приостановлена.",
                                   failedCount, linkInfo.LinkRetries);
                }
                else if (failedCount >= linkInfo.LinkRetries)
                {
                    log.ErrorFormat("Сеанс синхронизации завершен с ошибкой. Попытка связи № {0}. Связь приостановлена.",
                                    failedCount);
                    thread.Delay = linkInfo.RetryAfterErrorsDelay;
                }
            }

            if (log.IsDebugEnabled)
            {
                log.Debug("Synchronize:end");
            }
        }