Программный перезапуск службы IIS Hosted WCF - изменение проблемы привязок - PullRequest
0 голосов
/ 09 декабря 2011

Я попал в эту не очень хорошую ситуацию .. Когда веб-приложение запускается - я настраиваю различные маршруты для своих служб, чтобы клиенты моего многопользовательского приложения подключались к:

private static void RegisterRoutes()
{
   // Setup URL's for each customer
   using (var cmc = new CoreModelContext())
   {
      foreach (var account in cmc.Accounts.Where(aa => aa.IsActive).ToList())
      {
         RouteTable.Routes.Add(
              new ServiceRoute(account.AccountId + "/mobile", 
                               new MyServiceHostFactory(), typeof(MobileService)));
      }
   }
}

Итак, когда мой сайт / служба запускается - он берет все учетные записи из базы данных и устанавливает маршруты.

Это единственная точка отказа прямо здесь. Иногда серверы перезагружаются в неправильном порядке, и если SQL Server не запущен - эта служба запускается в «странном» режиме.

Сегодня веб-служба перестала отвечать. Я проверил журналы - IIS восстановил пул по расписанию (настройки по умолчанию) и запустил другой работающий процесс Что-то не щелкнуло, и бум - сервер перестал отвечать. Маршруты не были зарегистрированы ...

Итак. У меня вопрос .. Как это исправить наилучшим образом? Я могу поместить маршруты в конфигурационный файл, но это будет означать, что я должен поддерживать эти идентификаторы в 2 местах. Возможно, не так уж и плохо, но я бы предпочел сделать это по-другому, если это возможно.

Можно ли программно попробовать перезапустить пул? Что происходит, когда исключение выдается в Application_Start? Прямо сейчас я не поймаю это в ловушку.

1 Ответ

0 голосов
/ 09 декабря 2011

Не уверен, что это «исправление», но когда у нас возникают похожие проблемы с зависимостями, мы следим за тем, чтобы другие зависимости не могли успешно запускаться в «странном» режиме.В этом случае я бы сильно сломал приложение, если сервер sql недоступен, по крайней мере, на производстве.Гораздо лучше не обрабатывать ничего, чем неправильно.

...