我有一个.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)
{
...
}
}
}
你知道这里发生了什么吗?
答案 0 :(得分:1)
在事件日志中有一些服务,这些服务在达到我的服务超时后开始。由于我的服务作为特殊用户运行,我可以检测到两个服务,这些服务由我自己的服务实际触发。因此,我将这些添加到服务依赖项中并且它可以工作。
我想知道是否有文档,其中列出了wcf的依赖项。 这里提到的是服务,我的服务依赖于:
后两者导致死锁。