В настоящее время я сталкиваюсь с очень странной (по крайней мере, для меня) проблемой, связанной с настройкой отказоустойчивого партнера в Sitecore.
Окружающая обстановка:
- .NET Framework 3.5
- Windows Server 2008 R2
- ИИС 7.5
Это одна из моих строк подключения:
<add name="master" connectionString="user id=user;password=password;Data Source=PRIMARY_SERVER\INSTANCE,60000;Failover Partner=FAILOVER_SERVER\INSTANCE,60000;Database=Sitecore_Master" />
Как видите, я настроил резервного партнера, который принимает те же учетные данные, что и первичный сервер базы данных.
Если я остановлю основную базу данных во время работы, я получу исключение SqlException, которое говорит:
Login failed for user 'user'
Любой дальнейший запрос будет отображать то же исключение, если только AppPool не будет переработан. Теперь приложение указывает на отказоустойчивую базу данных...
Не должно ли приложение само переключать базу данных?
Единственная идея, которая у меня была, была примерно такой, но она кажется очень, очень грязной, и я даже не проверял ее:
public class FailoverSqlDataProvider : SqlServerDataProvider
{
public FailoverSqlDataProvider(string connectionString) : base(connectionString)
{ }
protected override LanguageCollection LoadLanguages()
{
try
{
return base.LoadLanguages();
}
catch (Exception ex)
{
if (ex is SqlException)
{
Trace.TraceError("(FailoverSqlDataProvider) An error occured: {0}", ex.ToString());
HttpRuntime.UnloadAppDomain();
}
return new LanguageCollection();
}
}
}