我们在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上的本地管理员的域帐户下运行。
虽然我们可以增加超时值,但我不想让它无限超时。我想知道这种行为背后的原因是什么,以及最佳解决方案是什么。