2010-02-23 4 views
4

Я просмотрел веб-ресурсы о том, как сделать приложение/веб-приложение «Cluster Aware», используя Failover Cluster API. Я нашел много технических статей, но ни один из них не был написан с точки зрения программиста. Есть ли у кого-нибудь хорошие ссылки или могут предоставить мне образцы кода или какой-либо другой ввод о том, как сделать приложение Cluster Aware с точки зрения программиста? Мы используем C# в качестве основного языка программирования.Примеры советов/примеров о том, как сделать приложение «Cluster Aware»

Кластер - активный/пассивный кластер, содержащий два узла (Windows 2003 Server), работающих под управлением IIS.

Поскольку я не нашел ничего подозрительного, что у меня что-то не хватает!

Br

Ausgar

+0

Что вы понимаете под кластером? Что вы пытаетесь сделать с осознанием? –

ответ

1

ли у Вас удача вокруг этого?

Я преследую ту же информацию?

В случае, когда приложение имеет базу данных, находящуюся в кластере SQL. Когда кластер выполняет сбой, пул соединений SQL становится недействительным и поврежден. Пул соединений должен быть очищен и повторно создан без всплытия исключения.

С кодовой точки зрения необходимо сначала.

  1. Отправить SQL-запрос в пул соединений.
  2. Захват исключения из использования недопустимого пула соединений SQL.
  3. Промыть пул соединений или выполнить итерацию по всем соединениям до тех пор, пока пул не получит соединение.
  4. Восстановите новый пул соединений.
  5. Повторно отправьте запрос SQL.

Моя проблема в том, что я архитектор инфраструктуры, и мои навыки кодирования слабы в лучшие времена.

0

В качестве примера вы можете сыграть и с помощью колледжа придумать следующее.

static void Main(string[] args) 
    { 
     Boolean PrevSqlError = false; 
     Boolean NewSqlPool = false; 
     String ConStr = "Data Source=SQL-CLUSTER1;Initial Catalog=Example;Integrated Security=True;Connection Timeout=60;Min pool size=5"; 
     Console.WriteLine("Press any key to read from database"); 
     Console.ReadKey(); 
     while (true) 
     { 
      try 
      { 
       Console.WriteLine("Attempting to connect"); 

       using (var context1 = new ExampleDataContext()) 
       { 
        var customers1 = context1.Customers.ToList(); 
        var connection1 = new SqlConnection(ConStr); 
        connection1.Open(); 
        PrintCustomers(customers1); 
        connection1.Close(); 
       } 
       PrevSqlError = false; 
       NewSqlPool = false; 
       Console.WriteLine("Sleeping 3s"); 
       Thread.Sleep(3000); 
      } 
      catch (SqlException sqlException) 
      { 
       var SqlError = sqlException.Number; 
       Console.WriteLine("Error connecting to SQL : " + SqlError+" : "+sqlException.Message); 
       if (NewSqlPool == true) 
       { 
        Console.WriteLine("Error in New Connection Pool. Exiting!"); 
        Thread.Sleep(10000); 
        return; 
       } 
       if (PrevSqlError == true) 
       { 
        if (SqlError == 10054 || SqlError == 232 || SqlError == 233 || SqlError == 64 || SqlError == 4060) 
        { 
         Console.WriteLine("SQL Cluster Failing Over. Waiting 5s"); 
         SqlConnection.ClearAllPools(); 
         PrevSqlError = false; 
         NewSqlPool = true; 
         Thread.Sleep(5000); 
        } 
        else 
        { 
         Console.WriteLine("Fatal SQL Exception. Exiting!"); 
         Thread.Sleep(10000); 
         return; 
        } 
       } 
       else 
       { 
       Console.WriteLine("SQL Error, Retrying in 3s"); 
       PrevSqlError = true; 
       Thread.Sleep(3000); 
       } 
      } 
     } 
    } 

    private static void PrintCustomers(List<Customer> customers) 
    { 
     foreach (var item in customers) 
     { 
      Console.WriteLine(string.Format("{0} - {1}", item.Id, item.Name)); 
     } 
    } 
+0

Это просто показывает, как подключиться к базе данных кластера. Я не думаю, что это большое дело. это довольно просто. –