Лучший способ обновить работающий код сервера .NET без отключения клиентов - PullRequest
2 голосов
/ 15 декабря 2011

Какова лучшая технология или метод для создания серверного кода в .NET, который можно изменить во время работы?

Вы получаете эту функциональность бесплатно, когда используете веб-сервисы из-за модели без сохранения состояния, но я строю архитектуру клиент / сервер, где клиенты подключаются в течение всего срока их сеансов по TCP.

Как я могу внести изменения, не отключая пользователей и не перезагружая мой сервер? Очевидно, что код управления соединением и API не изменится, иначе это очень быстро сломает.

Использует ли он MEF? Какая-то теневая копия? Я бы предпочел НЕ использовать очереди сообщений и несколько процессов.

1 Ответ

2 голосов
/ 15 декабря 2011
  • Вы можете использовать MEF's Recomposition
  • Абстрактный способ передачи данных на другой объект вашим сервером
  • Внутри этого объекта выделите фоновый поток, чтобыпроверка обновлений
  • Когда обновление станет доступным, заблокируйте объект, чтобы клиент не мог получить данные во время обновления

Общедоступный API на стороне сервера

public SomeDataModel SomeGetDataMethod(...)
{
   // auth
   return someObject.GetData(); // GetData() methods abstracted
}

Внутренний сервер

public SomeObject
{
    public SomeObject()
    {
        // spin off a background thread to check for updates
    }

    private void OnUpdateAvail() 
    {
       lock(recomposeLock)
       {
            // recompose
       }
    }

    public SomeDataModel GetData()
    {
       lock(recomposeLock)
       {
            // get your data
            return someDataModel;
       }
    }
}
...