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

时间:2010-02-07 19:42:15

标签: c# .net wcf windows-xp service

我有一个.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<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 个答案:

答案 0 :(得分:1)

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

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

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

  • HTTP
  • RPCSS
  • CryptSvc
  • HTTPFilter
  • RasMan验证

后两者导致死锁。