Ошибка репликации SQL Server

У меня есть коробка SQL Server 2005, настроенная для репликации слиянием в SQL Server CE 3.0. Публикация, издатель, распространитель и IIS настроены.

В моем приложении я пытаюсь синхронизировать базы данных, используя следующий код:

//TODO: Change for production
//***************************
string localDBPath = @"C:\Documents and Settings\Robert\Desktop\MyDB.sdf";
//***************************

SqlCeReplication replicator = new SqlCeReplication();
replicator.InternetUrl = "http://myWebServer/sqlcesa30.dll";
replicator.Publisher = "mySqlServer";
replicator.PublisherDatabase = "myDatabase";
replicator.PublisherSecurityMode = SecurityType.NTAuthentication;
replicator.Publication = "myPublication";
replicator.Subscriber = Dns.GetHostName();
replicator.SubscriberConnectionString = @"Data Source=" + localDBPath;

try
{
    // Check if the database file already exists
    if (!System.IO.File.Exists(localDBPath))
    {
        // Add a new subscription and create the local database file
        replicator.AddSubscription(AddOption.CreateDatabase);
    }

    // Transfer the initial snapshot of data if this is the first time this is called.
    // Subsequent calls will transfer only the changes to the data.
    replicator.Synchronize();
}
catch (SqlCeException ex)
{
    // Display any errors in message box
    MessageBox.Show(ex.Message);
}
finally
{
    // Dispose of the SqlCeReplication object, but don't drop the subscription
    replicator.Dispose();
}

К сожалению, этот код не работает в строке «replicator.Synchronize» со следующим сообщением об ошибке:

Ошибка подключения к SQL Server с предоставленной информацией о подключении. SQL Server не существует, доступ запрещен, так как пользователь IIS не является допустимым пользователем на SQL Server или указан неверный пароль.

Это сообщение об ошибке не очень понятно для меня, и мне не хватает места для поиска причины этого. Любые идеи?


person Sesame    schedule 16.02.2010    source источник


Ответы (2)


Убедитесь, что учетная запись агента является одним и тем же пользователем и паролем на всех ящиках.

Убедитесь, что вы вызываете правильные экземпляры.

Убедитесь, что агент запущен на всех задействованных машинах.

Проверьте журналы событий sql на всех серверах и посмотрите, какой из них выдает ошибку, это также может сузить проблему.

Вы также можете проверить это, чтобы убедиться, что вы правильно настроили:

http://msdn.microsoft.com/en-us/library/aa454892.aspx

Та же проблема здесь, ему нужно было правильно добавить имя экземпляра:

http://bytes.com/topic/sql-server/answers/611761-merge-replication-error-failure-connect-sql-server-provided-connection

Проверьте это тоже:

http://support.microsoft.com/kb/314783

http://support.microsoft.com/kb/319723

http://msdn2.microsoft.com/en-us/library/ms172357.aspx

еще раз убедитесь, что вы указали правильные экземпляры: repl.Publisher = "macnine-name\instance-name"

Вы также можете просмотреть этот блог:

http://blogs.msdn.com/sql_protocols/archive/2005/09/28/474698.aspx

person James Campbell    schedule 16.02.2010

сообщение исходит от вашего подключаемого модуля репликации IIS: //myWebServer/sqlcesa30.dll. Когда он пытается подключиться к издателю, он не может его найти. Издатель называется mySqlServer, но myWebServer, по-видимому, не может связаться с ним. Это может быть проблема с именем (опечатка), проблема с брандмауэром (заблокирован порт SQL), проблема с IPSEC, проблема с конфигурацией (SQL не прослушивает удаленные подключения) и так далее. Следуйте обычным шагам по устранению неполадок подключения SQL Server между myWeServer и mySqlServer.

person Remus Rusanu    schedule 16.02.2010