В настоящее время я сталкиваюсь с действительно странной (по крайней мере для меня) проблемой, касающейся конфигурации партнера по отказоустойчивости в Sitecore.
Среда:
- .NET Framework 3.5
- Windows Server 2008 R2
- IIS 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();
}
}
}