Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft sync framework 2.1大数据返回连接超时_C#_Sync_Microsoft Sync Framework - Fatal编程技术网

C# Microsoft sync framework 2.1大数据返回连接超时

C# Microsoft sync framework 2.1大数据返回连接超时,c#,sync,microsoft-sync-framework,C#,Sync,Microsoft Sync Framework,您好,我正在尝试将3个表与不同服务器上的2个数据库进行同步 这些表有点大,共有5029513行,数据大小为1,45gb: 当我尝试用空表数据同步客户机和服务器时,会成功,因此连接没有问题 我试图让脚本在命令超时设置为36000秒的情况下运行一整晚,但当我醒来时,出现连接超时异常 Stacktrace: vid System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakCo

您好,我正在尝试将3个表与不同服务器上的2个数据库进行同步

这些表有点大,共有5029513行,数据大小为1,45gb:

当我尝试用空表数据同步客户机和服务器时,会成功,因此连接没有问题

我试图让脚本在命令超时设置为36000秒的情况下运行一整晚,但当我醒来时,出现连接超时异常

Stacktrace:

   vid System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   vid System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   vid System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
   vid System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync()
   vid System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket()
   vid System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer()
   vid System.Data.SqlClient.TdsParserStateObject.TryReadByte(Byte& value)
   vid System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   vid System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
   vid System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
   vid System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   vid Microsoft.Synchronization.Data.SqlServer.SqlSyncTrackingTableHelper.PopulateFromBaseTable(SqlTransaction trans)
   vid Microsoft.Synchronization.Data.SqlServer.SqlSyncTableProvisioning.Apply(SqlTransaction trans)
   vid Microsoft.Synchronization.Data.SqlServer.SqlSyncScopeProvisioning.ApplyScope(SqlConnection connection)
   vid Microsoft.Synchronization.Data.SqlServer.SqlSyncScopeProvisioning.ApplyInternal(SqlConnection connection)
   vid Microsoft.Synchronization.Data.SqlServer.SqlSyncScopeProvisioning.Apply()
   vid itsperfect.ResponseHandler.Syncronization.Program.Main() i c:\Dev\TFS\itsperfect\Web\ResponseHandler\Main\src\itsperfectResponseHandler\itsperfect.ResponseHandler.Syncronization.Test\Program.cs:rad 45
   vid System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   vid System.AppDomain.nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   vid System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
   vid System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
   vid System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
   vid System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
   vid System.Activator.CreateInstance(ActivationContext activationContext)
   vid Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
   vid System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   vid System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   vid System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   vid System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   vid System.Threading.ThreadHelper.ThreadStart()
我能做些什么来让它工作客户端是“SQL Server 2008”,服务器是
“SQL Server 2005 SP3”

这是我正在使用的代码,它在serverProvision.Apply()停止

class Program
    {
        static void Main()
        {
            //setup scope name
            const string scopeName = "EmailSyncDBScope";

            //setup the connections
            var serverConn = new SqlConnection(ConfigurationManager.ConnectionStrings["ServerConnection"].ConnectionString);
            var clientConn = new SqlConnection(ConfigurationManager.ConnectionStrings["ClientConnection"].ConnectionString);
            var serverProvision = new SqlSyncScopeProvisioning(serverConn);

            serverProvision.CommandTimeout = int.Parse(ConfigurationManager.AppSettings.Get("SyncCommandTimeout"));

            //provision server
            if (!serverProvision.ScopeExists(scopeName))
            {
                var serverScopeDesc = new DbSyncScopeDescription(scopeName);
                // add table
                var emailTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Email", serverConn);
                var emailMessageTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Email_Message", serverConn);
                var emailStatusTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Email_Status", serverConn);

                serverScopeDesc.Tables.Add(emailTableDesc);
                serverScopeDesc.Tables.Add(emailMessageTableDesc);
                serverScopeDesc.Tables.Add(emailStatusTableDesc);

                serverProvision.PopulateFromScopeDescription(serverScopeDesc);
                //apply the scope definition

                Console.WriteLine("Applying server provision.");
                serverProvision.Apply();
            }

            //provision client
            var clientProvision = new SqlSyncScopeProvisioning(clientConn);
            clientProvision.CommandTimeout = int.Parse(ConfigurationManager.AppSettings.Get("SyncCommandTimeout"));

            if (!clientProvision.ScopeExists(scopeName))
            {
                //get scope description from server
                var scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope(scopeName, serverConn);
                clientProvision.PopulateFromScopeDescription(scopeDesc);
                //apply the scope definition
                Console.WriteLine("Applying client provision.");
                clientProvision.Apply();
            }

            // create the sync orchestrator
            var syncOrchestrator = new SyncOrchestrator();

            //setup providers
            var localProvider = new SqlSyncProvider(scopeName, clientConn);
            var remoteProvider = new SqlSyncProvider(scopeName, serverConn);
            syncOrchestrator.LocalProvider = localProvider;
            syncOrchestrator.RemoteProvider = remoteProvider;

            Console.WriteLine("Getting sync direction order settings.");
            var syncDirectionOrder = GetSyncDirectionOrder(ConfigurationManager.AppSettings.Get("SyncDirectionOrder"));

            // set sync direction
            syncOrchestrator.Direction = syncDirectionOrder;

            // execute the synchronization process
            SyncAndEmail(syncOrchestrator, bool.Parse(ConfigurationManager.AppSettings.Get("SendMail")));

        }

        private static SyncDirectionOrder GetSyncDirectionOrder(string syncDirectionOrder)
        {
            SyncDirectionOrder returnValue;

            switch (syncDirectionOrder)
            {
                case "Upload" :
                    returnValue = SyncDirectionOrder.Upload;
                    break;
                case "Download" :
                    returnValue = SyncDirectionOrder.Download;
                    break;
                case "UploadAndDownload" :
                    returnValue = SyncDirectionOrder.UploadAndDownload;
                    break;
                case "DownloadAndUpload" :
                    returnValue = SyncDirectionOrder.DownloadAndUpload;
                    break;
                default:
                    returnValue = SyncDirectionOrder.Upload;
                    break;
            }

            return returnValue;
        }

        private static void SyncAndEmail(SyncOrchestrator syncOrchestrator, bool sendEmail)
        {
            Console.WriteLine("Syncronizing.");
            var syncStats = syncOrchestrator.Synchronize();

            var content = new StringBuilder();
            content.Append("<p><h2>Syncronization report:</h2></p>");
            content.Append("<strong>Start Time:</strong> " + syncStats.SyncStartTime + "</br>");
            content.Append("<strong>Total Changes Uploaded:</strong> " + syncStats.UploadChangesTotal + "</br>");
            content.Append("<strong>Total Changes Uploaded and Applied:</strong> " + syncStats.UploadChangesApplied + "</br>");
            content.Append("<strong>Total Changes Uploaded and Failed:</strong> " + syncStats.UploadChangesFailed + "</br>");
            content.Append("<strong>Total Changes Downloaded:</strong> " + syncStats.DownloadChangesTotal + "</br>");
            content.Append("<strong>Total Changes Downloaded and Applied:</strong> " + syncStats.DownloadChangesApplied + "</br>");
            content.Append("<strong>Total Changes Downloaded and Failed:</strong> " + syncStats.DownloadChangesFailed + "</br>");
            content.Append("<strong>Complete Time:</strong> " + syncStats.SyncEndTime);

        if (sendEmail)
            {
                var emailModel = new EmailModel
                {
                    MailTo = ConfigurationManager.AppSettings.Get("MailTo").ToLower(),
                    MailFrom = ConfigurationManager.AppSettings.Get("MailFrom").ToLower(),
                    Subject = ConfigurationManager.AppSettings.Get("MailSubject"),
                    Content = content.ToString()
                };

                var mailClient = new MailServiceClient();
                Console.WriteLine("Sending email.");
                mailClient.SendFromExtreme(emailModel.MailFrom, new[] { emailModel.MailTo }, emailModel.Subject, emailModel.Content, "", new[] { "Syncronization" }, EmailType.ControlTask, 0, false);
            }
        }
    }
类程序
{
静态void Main()
{
//设置范围名称
常量字符串scopeName=“EmailSyncDBScope”;
//设置连接
var serverConn=新的SqlConnection(ConfigurationManager.ConnectionString[“ServerConnection”].ConnectionString);
var clientConn=新的SqlConnection(ConfigurationManager.ConnectionString[“ClientConnection”].ConnectionString);
var serverProvision=新的SqlSyncScopeProvisioning(serverConn);
serverProvision.CommandTimeout=int.Parse(ConfigurationManager.AppSettings.Get(“SyncCommandTimeout”);
//供应服务器
如果(!serverProvision.ScopeExists(scopeName))
{
var serverScopeDesc=新的DbSyncScopeDescription(scopeName);
//添加表
var emailTableDesc=SqlSyncDescriptionBuilder.GetDescriptionForTable(“电子邮件”,serverConn);
var emailMessageTableDesc=SqlSyncDescriptionBuilder.GetDescriptionForTable(“电子邮件”,serverConn);
var emailStatusTableDesc=SqlSyncDescriptionBuilder.GetDescriptionForTable(“电子邮件状态”,serverConn);
serverScopeDesc.Tables.Add(emailTableDesc);
serverScopeDesc.Tables.Add(emailMessageTableDesc);
serverScopeDesc.Tables.Add(emailStatusTableDesc);
serverProvision.PopulateFromScopeDescription(ServerScopeDescription);
//应用范围定义
控制台.WriteLine(“应用服务器配置”);
serverProvision.Apply();
}
//供应客户
var clientProvision=new-SqlSyncScopeProvisioning(clientConn);
clientProvision.CommandTimeout=int.Parse(ConfigurationManager.AppSettings.Get(“SyncCommandTimeout”);
如果(!clientProvision.ScopeExists(scopeName))
{
//从服务器获取作用域描述
var scopeDesc=SqlSyncDescriptionBuilder.GetDescriptionForScope(scopeName,serverConn);
clientProvision.PopulateFromScopeDescription(scopeDesc);
//应用范围定义
Console.WriteLine(“应用客户条款”);
clientProvision.Apply();
}
//创建同步编排器
var syncOrchestrator=新的syncOrchestrator();
//设置提供程序
var localProvider=新的SqlSyncProvider(scopeName,clientConn);
var remoteProvider=新的SqlSyncProvider(scopeName,serverConn);
syncOrchestrator.LocalProvider=LocalProvider;
syncOrchestrator.RemoteProvider=RemoteProvider;
WriteLine(“获取同步方向顺序设置”);
var syncDirectionOrder=GetSyncDirectionOrder(ConfigurationManager.AppSettings.Get(“syncDirectionOrder”);
//设置同步方向
syncOrchestrator.Direction=syncDirectionOrder;
//执行同步过程
SyncAndEmail(syncOrchestrator,bool.Parse(ConfigurationManager.AppSettings.Get(“SendMail”));
}
私有静态SyncDirectionOrder GetSyncDirectionOrder(字符串SyncDirectionOrder)
{
SyncDirectionOrder返回值;
交换机(syncDirectionOrder)
{
案例“上传”:
returnValue=SyncDirectionOrder.Upload;
打破
案例“下载”:
returnValue=SyncDirectionOrder.Download;
打破
案例“UploadAndDownload”:
returnValue=SyncDirectionOrder.UploadAndDownload;
打破
案例“下载和上传”:
returnValue=SyncDirectionOrder.DownloadAndUpload;
打破
违约:
returnValue=SyncDirectionOrder.Upload;
打破
}
返回值;
}
专用静态无效SyncAndEmail(SyncOrchestrator SyncOrchestrator,bool sendEmail)
{
Console.WriteLine(“同步”);
var syncStats=syncOrchestrator.Synchronize();
var content=新的StringBuilder();
内容。追加(“同步报告:

”; content.Append(“开始时间:”+syncStats.SyncStartTime+”
”; content.Append(“上传的更改总数:”+syncStats.UploadChangesTotal+”
”; content.Append(上传和应用的更改总数:“+syncStats.UploadChangesApplied+”
”; content.Append(“上传并失败的更改总数:”+syncStats.UploadChangesFailed+”
”; content.Append(“下载的更改总数:”+syncStats.DownloadChangesTotal+”
”; content.Append(“下载和应用的更改总数:”+syncStats.downloadchangesplied+”
”; content.Append(“