Служба WCF, размещенная как служба Windows, выдает ошибку времени ожидания - PullRequest
1 голос
/ 27 марта 2012

У нас есть очень упрощенная служба WCF (называемая ACS), размещенная как служба Windows на коробке с Windows 2003.Этот сервис предоставляет конечную точку Http.Мы используем TopShelf для настройки хоста Windows, настроенного как служба Windows.При запуске этой службы она отправляет сообщение «Регистрация» другой службе WCF, которая размещается в отдельном окне в IIS.Однако это регистрационное сообщение от ACS службе IIS / WCF не передается, и ACS не запускается.Мы получаем ошибку:

Превышен тайм-аут канала запроса при попытке отправки после 00:02:00.Увеличьте значение тайм-аута, передаваемое вызову Request, или увеличьте значение SendTimeout в Binding.Время, выделенное для этой операции, могло быть частью более длительного тайм-аута. Внутреннее исключение: HTTP-запрос к «{конечной точке IIS WCF на основе http здесь}» превысил установленное время ожидания 00:00:00.Время, отведенное для этой операции, могло быть частью более длительного тайм-аута.

Если мы удалим этот стартовый вызов из ACS, то ACS запускается и работает нормально.Веб-служба может обращаться к 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.

Хотя мы можем увеличить значение времени ожидания, я не хочудайте ему бесконечный тайм-аут.Я хотел бы знать, в чем причина такого поведения и какое наилучшее разрешение для этого.

...