Почему моя служба .NET запускается очень медленно при загрузке XP - PullRequest
1 голос
/ 07 февраля 2010

У меня есть служба Windows .NET, которая выступает в качестве хоста для некоторых wcf. В методе OnStart сервисные хосты создаются и запускаются. Служба настроена на автоматический запуск. Это хорошо работает в Windows 7 (32-разрядной и 64-разрядной) и может быть запущено с помощью «net start» в Windows XP Pro SP3. Запуск службы командой net start занимает около 20 секунд.

Но когда загружается Windows XP Pro SP3, в журнале событий появляется сообщение об истечении времени ожидания. Сам сервис не перестает запускаться, хотя и делает свои зависимости. Проблема может быть воспроизведена на различных машинах XP. Количество ядер и память не влияют. Обновления актуальны.

Теперь становится любопытно: я проанализировал трассировку и обнаружил, что запуск сервиса занимает около 60 секунд. Таким образом, я добавил вызов ReqestAdditionalTime (480000). Но сейчас обслуживание занимает чуть более 480 секунд. Отношение очевидно. Время расходуется в следующем разделе кода:

 var asyncResults = new List<IAsyncResult>();
 foreach (var host in myHosts)
   asyncResults.Add(host.BeginOpen(null, host));


  // wait until finished
  while (asyncResults.Count != 0)
  {
   IAsyncResult ar = asyncResults[0];
   if (!ar.IsCompleted) ar.AsyncWaitHandle.WaitOne(1000);
   if (ar.IsCompleted)
   {
        asyncResults.Remove(ar);
        var co = (ICommunicationObject)ar.AsyncState;

        try
        {
            co.EndOpen(ar);
        }
        catch (Exception ex)
        {
          ...
        }
   }
 }

Ты хоть представляешь, что здесь происходит?

1 Ответ

1 голос
/ 08 февраля 2010

Эй, я сам нашел решение, выполнив несколько интенсивных исследований журнала.

В журнале событий были некоторые службы, которые запускались ПОСЛЕ истечения времени ожидания моей службы. Поскольку мой сервис работает как отдельный пользователь, я мог обнаружить два сервиса, которые были запущены моим собственным сервисом. Таким образом, я добавил их в зависимости сервисов, и это работает.

Интересно, есть ли документация, в которой перечислены зависимости wcf? В качестве ссылки здесь приведены сервисы, от которых зависит мой сервис:

  • HTTP
  • RPCSS
  • CryptSvc
  • HTTPFilter
  • RASMAN

Последние два, где те, которые вызывают тупик.

...