private void to_ApplyChangeFailed(object sender, DbApplyChangeFailedEventArgs e) { var toProvider = sender as RelationalSyncProvider; #if DEBUG if (toProvider.ScopeName == Scope.Icd.ToScopeString()) { return; } #endif if (e.Conflict.Type == DbConflictType.ErrorsOccurred) { Poster.PostMessage("ApplyChangeFailed. Error: {0}", e.Error); } else if (SyncTracer.IsVerboseEnabled() == false) { SyncTracer.Warning(1, "CONFLICT DETECTED FOR CLIENT {0}", toProvider.Connection); SyncTracer.Warning(2, "** Local change **"); SyncTracer.Warning(2, TableToStr(e.Conflict.LocalChange)); SyncTracer.Warning(2, "** Remote change **"); SyncTracer.Warning(2, TableToStr(e.Conflict.RemoteChange)); } if (!ConflictsCounter.Keys.Contains(e.Conflict.Type)) { ConflictsCounter[e.Conflict.Type] = 0; } ConflictsCounter[e.Conflict.Type]++; if (e.Conflict.Type != DbConflictType.ErrorsOccurred) { e.Action = ApplyAction.RetryWithForceWrite; } }
private void LoguearNivelDeTracingConfigurador() { if (SyncTracer.IsErrorEnabled() || SyncTracer.IsWarningEnabled() || SyncTracer.IsInfoEnabled() || SyncTracer.IsVerboseEnabled()) { Loguear("Tracing activado! revisar en config cual es el archivo."); } else { Loguear("Tracing desactivado, activar en el config."); } if (SyncTracer.IsErrorEnabled()) { Loguear("Tracing de errores Activado"); } if (SyncTracer.IsWarningEnabled()) { Loguear("Tracing de advertencias Activado"); } if (SyncTracer.IsInfoEnabled()) { Loguear("Tracing de información Activado"); } if (SyncTracer.IsVerboseEnabled()) { Loguear("Tracing de todo Activado"); } }
internal static bool OpenConnection(IDbConnection connection) { SyncExpt.CheckArgumentNull((object)connection, "connection"); bool flag = false; switch (connection.State) { case ConnectionState.Closed: if (SyncTracer.IsVerboseEnabled()) { if (connection is SqlConnection) { SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(); connectionStringBuilder.ConnectionString = connection.ConnectionString; if (!string.IsNullOrEmpty(connectionStringBuilder.Password)) { connectionStringBuilder.Password = "******"; } SyncTracer.Verbose("Connecting using string: {0}", new object[1] { (object)connectionStringBuilder.ConnectionString }); } else { SyncTracer.Verbose("Connecting to database: {0}", new object[1] { (object)connection.Database }); } } if (connection is SqlConnection || connection is IConnectionWrapper) { SyncUtil.TryOpenConnection(connection); } else { connection.Open(); } flag = true; goto case ConnectionState.Open; case ConnectionState.Open: return(flag); case ConnectionState.Broken: SyncTracer.Verbose("Closing broken connection"); connection.Close(); goto case ConnectionState.Closed; default: throw new DbSyncException(SyncResource.FormatString("UnhandledConnectionState", new object[1] { (object)((object)connection.State).ToString() })); } }
private void SampleServerSyncProvider_ApplyChangeFailed(object sender, ApplyChangeFailedEventArgs e) { //Verbose tracing includes information about conflicts. In this application, //Verbose tracing is disabled, and we have decided to flag conflicts with a //warning. //Check if Verbose tracing is enabled and if the conflict is an error. //If the conflict is not an error, we write a warning to the trace file //with information about the conflict. //<snippetOCS_CS_Tracing_ApplyChangeFailed> if (SyncTracer.IsVerboseEnabled() == false && e.Conflict.ConflictType != ConflictType.ErrorsOccurred) { DataTable conflictingServerChange = e.Conflict.ServerChange; DataTable conflictingClientChange = e.Conflict.ClientChange; int serverColumnCount = conflictingServerChange.Columns.Count; int clientColumnCount = conflictingClientChange.Columns.Count; StringBuilder clientRowAsString = new StringBuilder(); StringBuilder serverRowAsString = new StringBuilder(); for (int i = 0; i < clientColumnCount; i++) { clientRowAsString.Append(conflictingClientChange.Rows[0][i] + " | "); } for (int i = 0; i < serverColumnCount; i++) { serverRowAsString.Append(conflictingServerChange.Rows[0][i] + " | "); } SyncTracer.Warning(1, "CONFLICT DETECTED FOR CLIENT {0}", e.Session.ClientId); SyncTracer.Warning(2, "** Client change **"); SyncTracer.Warning(2, clientRowAsString.ToString()); SyncTracer.Warning(2, "** Server change **"); SyncTracer.Warning(2, serverRowAsString.ToString()); } //</snippetOCS_CS_Tracing_ApplyChangeFailed> }
static void Main(string[] args) { //The Utility class handles all functionality that is not //directly related to synchronization, such as holding connection //string information and making changes to the server database. Utility util = new Utility(); //The SampleStats class handles information from the SyncStatistics //object that the Synchronize method returns. SampleStats sampleStats = new SampleStats(); //Delete and re-create the database. The client synchronization //provider also enables you to create the client database //if it does not exist. util.SetClientPassword(); util.RecreateClientDatabase(); //Write to the console which tracing levels are enabled. The app.config //file specifies a value of 3 for the SyncTracer switch, which corresponds //to Info. Therefore, Error, Warning, and Info return True, and Verbose //returns False. Console.WriteLine(""); //<snippetOCS_CS_Tracing_LevelsEnabled> Console.WriteLine("** Tracing Levels Enabled for this Application **"); Console.WriteLine("Error: " + SyncTracer.IsErrorEnabled().ToString()); Console.WriteLine("Warning: " + SyncTracer.IsWarningEnabled().ToString()); Console.WriteLine("Info: " + SyncTracer.IsInfoEnabled().ToString()); Console.WriteLine("Verbose: " + SyncTracer.IsVerboseEnabled().ToString()); //</snippetOCS_CS_Tracing_LevelsEnabled> //Initial synchronization. Instantiate the SyncAgent //and call Synchronize. //<snippetOCS_CS_Tracing_Synchronize> SampleSyncAgent sampleSyncAgent = new SampleSyncAgent(); SyncStatistics syncStatistics = sampleSyncAgent.Synchronize(); //</snippetOCS_CS_Tracing_Synchronize> sampleStats.DisplayStats(syncStatistics, "initial"); //Make a change at the client that fails when it is //applied at the server. The constraint violation //is automatically written to the trace file as a warning. util.MakeFailingChangesOnClient(); //Make changes at the client and server that conflict //when they are synchronized. The conflicts are written //to the trace file in the SampleServerSyncProvider_ApplyChangeFailed //event handler. util.MakeConflictingChangesOnClientAndServer(); //Subsequent synchronization. syncStatistics = sampleSyncAgent.Synchronize(); sampleStats.DisplayStats(syncStatistics, "subsequent"); //Return server data back to its original state. util.CleanUpServer(); //Exit. Console.Write("\nPress Enter to close the window."); Console.ReadLine(); }