我目前面临一个非常奇怪的问题(至少对我来说)有关Sitecore中故障转移合作伙伴配置的问题。
环境:
这是我的连接字符串之一:
<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();
}
}
}
答案 0 :(得分:3)
如果您使用带镜像的SQL Server,则只有在使用Witness服务器时才会自动进行故障转移,否则您必须手动处理切换。
您可以将SQL Server Express用作见证服务器,如果没有其他可用服务器,则可以从Web服务器运行它。