Я пытаюсь настроить метод, который попытается подключиться к SQL Server сначала на порт по умолчанию (1433) и затем на другой порт, например 7777 после сбоя.Настройка метода C#, пытающегося повторно подключиться к SQL Server на другом порту после первого отказа
Я хочу, чтобы избежать перестроения строки подключения и попытки подключения снова в случае сбоя, потому что этот метод будет выполнен с заданным интервалом, и я хочу как можно скорее устранить как можно больше накладных расходов.
Я попробовал следующее (любезно ConnectionStrings)
public void EstablishConnection()
{
string ConnectionString = "Data Source=127.0.0.1; Failover Partner=127.0.0.1,7777; Initial Catalog=foo;Connection Timeout = 3; Persist Security Info =True;User ID=<id>;Password=<password>";
try
{
SqlConnection Connection = new SqlConnection(ConnectionString);
Connection.Open();
}
catch (SqlException)
{
// Connection failed
}
}
Но, исходя от этого article и моего тестирования, он не работает так, как я предполагал.
Я мог бы легко решить эту проблему, выполнив следующие действия:
public void EstablishConnection()
{
string ConnectionString = "Data Source=127.0.0.1;Initial Catalog=foo;Connection Timeout = 3; Persist Security Info =True;User ID=<id>;Password=<password>";
try
{
SqlConnection Connection = new SqlConnection(ConnectionString);
Connection.Open();
}
catch (SqlException)
{
try
{
string ConnectionString = "Data Source=127.0.0.1,7777;Initial Catalog=foo;Connection Timeout = 3; Persist Security Info =True;User ID=<id>;Password=<password>";
SqlConnection Connection = new SqlConnection(ConnectionString);
Connection.Open();
}
catch (SqlException)
{
// Connection failed
}
}
}
Но это чувствует, как спагетти кода и общей плохой практикой.
Также в реальном приложении я не получаю полную строку подключения из файла конфигурации, я вытаскиваю параметры из файла конфигурации и строю строку конфигурации.
У вас есть зеркальный сервер? – jdweng
Нет идеи, что у меня было, если бы она не подключилась к ней на 1433, она перешла бы к серверу «Сбой по серверу», который является тем же сервером на другом порту. – Wamadahama
Каждый экземпляр SQL Server имеет только один порт. Нужно больше, чем один экземпляр сервера sql. – jdweng