2017-01-05 3 views
1

У меня есть простая служба WCF, которая передает изображения клиенту. На клиенте первый запрос на изображение занимает около 5,5 секунд, а затем последующие запросы занимают около 40 мс, что отлично.Задержка запроса WCF каждые 50 секунд

Однако через каждые 45 секунд независимо от того, были ли выполнены какие-либо запросы, следующий запрос всегда занимает около 4,6 секунды. Этот 45-секундный цикл повторяется непрерывно.

Я использую привязку net.tcp с потоковым режимом передачи. Я также попробовал буферный режим передачи с включенными/без надежных сеансов, но все это увеличило время, затрачиваемое на каждый запрос.

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

конфигурации сервера:

serviceHost = new ServiceHost(typeof(TServiceImplementation), serviceUri); 
serviceHost.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = false }); 

var netTCPBinding = new NetTcpBinding(SecurityMode.Transport); 
netTCPBinding.TransferMode = TransferMode.StreamedResponse; 
netTCPBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows; 

serviceHost.AddServiceEndpoint(typeof(TServiceContract), netTCPBinding, ServiceName); 
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex"); 

Клиент конфигурации:

<system.serviceModel> 
<bindings> 
    <netTcpBinding> 
    <binding name="TcpBinding" transferMode="StreamedResponse" maxReceivedMessageSize="2147483647" /> 
    </netTcpBinding> 
</bindings> 
<client> 
    <endpoint address="net.tcp://hostname:9000/StreamService" 
    binding="netTcpBinding" bindingConfiguration="TcpBinding" contract="StreamService.IStream" 
    name="NetTcpBinding_IStream" /> 
</client> 
</system.serviceModel> 

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

+0

Изменение периодов времени будет влиять только на то, как долго система будет ожидать ответа до объявления ошибки, она не влияет на скорость вашего ответа, это звучит так, как ваш пул приложений перерабатывается, что приведет к удалению службы и ее воссозданию требующий нескольких секунд времени работы, поэтому я бы посмотрел ваши настройки IIS – MikeT

+0

Он работает как служба Windows, поэтому это, вероятно, не проблема. – irv075

ответ

0

ОК, поэтому немного больше исследований, и я решил, что это проблема с разрешением адреса. Фактические изображения были размещены на другом компьютере, на котором выполняется служба, поэтому я изменил конфигурацию, чтобы использовать IP-адрес хост, а не имя компьютера, и проблема была решена.

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