У меня есть служба 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)
{
...
}
}
}
Ты хоть представляешь, что здесь происходит?