为什么我的.NET服务在XP启动时开始变慢

我有一个.NET Windows服务,它充当某些wcf的主机。 在OnStart方法中,创建并启动服务主机。 该服务配置为自动启动。 这在Windows 7(32位和64位)上运行良好,它可以在Windows XP Pro SP3上使用“net start”启动。 使用“net start”命令启动服务大约需要20秒。

但是当Windows XP Pro SP3启动时,事件日志中会出现超时消息。 虽然服务依赖,但服务本身并不会失败。 这个问题可以在各种XP机器上重现。 核心数和内存没有影响。 更新是最新的。

现在它变得好奇了:我分析了跟踪并发现该服务大约需要60秒才能启动。 因此我添加了对ReqestAdditionalTime(480000)的调用。 但现在该服务需要略多于480秒。 关系很明显。 以下代码部分消耗时间:

var asyncResults = new List(); 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) { ... } } } 

你知道这里发生了什么吗?

嘿,我通过做一些密集的Log-Research自己找到了解决方案。

在事件日志中有一些服务,这些服务在我的服务超时后开始。 由于我的服务作为特殊用户运行,我可以检测到两个服务,这些服务由我自己的服务实际触发。 因此,我将这些添加到服务依赖项,它的工作原理。

我想知道是否有文档,其中列出了wcf的依赖项。 这里提到的是服务,我的服务依赖于:

  • HTTP
  • RPCSS
  • CryptSvc
  • HTTPFilter
  • RasManvalidation

后两个导致死锁的地方。