托管为Windows服务的WCF服务会引发超时错误

时间:2012-03-27 09:28:03

标签: wcf windows-services windows-server-2003

我们在Windows 2003机器上托管了一个非常简单的WCF服务(称为ACS)作为Windows服务。此服务公开了一个Http端点。我们使用TopShelf配置配置为Windows服务的Windows主机。在启动此服务时,它会向另一个WCF服务发送“注册”消息,该服务托管在IIS下的单独框中。但是,不会传输从ACS到IIS / WCF服务的此注册消息,并且ACS无法启动。我们得到的错误是

  

请求频道在00:02:00之后尝试发送超时。   增加传递给Request或者增加的调用的超时值   Binding上的SendTimeout值。分配给此的时间   操作可能是较长超时的一部分。,内部   例外:对{{基于http的IIS WCF端点}'的HTTP请求   已超过00:00:00的分配超时。分配给的时间   此操作可能是较长超时的一部分。

如果我们从ACS中删除此启动呼叫,则ACS启动并正常工作。如果需要并且完成工作,基于Web的服务可以调用ACS。

这是启动ACS的示例代码(_acs,_ars等作为构造函数依赖项传入)

 HostFactory.Run(c =>
            {
                c.Service<IACSInterface>(s =>
                {
                    s.ConstructUsing(() => _acs);
                    s.WhenStarted(x =>
                    {
                        _serviceHost = new ServiceHost(x);
                        _serviceHost.Open();
                        string domainName = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
                        string fullyQualifiedMachineName = System.Net.Dns.GetHostName() + "." + domainName;
                        _ars.RegisterMachine(fullyQualifiedMachineName, AgentStatus.Available.ToString());

                    });
                    s.WhenStopped(x =>
                    {
                        if (_serviceHost != null && (_serviceHost.State != CommunicationState.Closed && _serviceHost.State != CommunicationState.Closing))
                            _serviceHost.Close();
                    });
                });
                c.SetDisplayName("servicename");
                c.SetServiceName("realSErviceName");
                c.SetDescription("The service that does something awesome.");
                c.RunAsLocalSystem();
                c.StartAutomatically();
            }

该服务设置为自动启动,并手动配置为在Windows 2003 Box上的本地管理员的域帐户下运行。

虽然我们可以增加超时值,但我不想让它无限超时。我想知道这种行为背后的原因是什么,以及最佳解决方案是什么。

0 个答案:

没有答案