Транспортный канал Http в WCF по умолчанию использует постоянные HTTP-соединения. Как контролировать сохранение времени ожидания для этих соединений? Значение по умолчанию - 100 секунд. Я нашел эту ценность, отслеживая приложение в Procmon. Я не нашел никаких параметров в элементе привязки HTTP-транспорта, который настраивает этот тайм-аут. Есть ли какой-либо .NET-класс, который может контролировать этот тайм-аут?
Как установить интервал сохранения HTTP-соединения в WCF
Ответ 1
Взгляните сюда:
Существует подробное обсуждение управления содержимым keep alive во время http-соединения.
Ответ 2
Мне кажется, что вы хотите настроить HTTP-заголовок Keep-Alive
. Вы должны прочитать эту статью о сохранении HTTP и сначала определить, действительно ли это действительно стоит вашего времени.
Если это так, попробуйте создать Message Inspector. Это должно позволить вам изменять заголовки HTTP для каждого отправляемого сообщения:
public class KeepAliveMessageInspector : IClientMessageInspector
{
// ...
public object BeforeSendRequest(
ref System.ServiceModel.Channels.Message request,
System.ServiceModel.IClientChannel channel)
{
// Add/modify the Keep-Alive header
var httpRequestMessage = new HttpRequestMessageProperty();
httpRequestMessage.Headers.Add("Keep-Alive", "9000");
request.Properties.Add(
HttpRequestMessageProperty.Name, httpRequestMessage);
return null;
}
// ...
}
Ответ 3
Я нашел решение для этого. Проблема в том, что базовое ядро http.sys имеет свой тайм-аут, и оно нарушит соединение.
http://mmmreddy.wordpress.com/2013/07/11/wcf-use-of-http-transport-sharing-persistent-tcp-sessions/
netsh http add timeout timeouttype=idleconnectiontimeout value=120
Кроме того, этот вопрос похож на этот Какой 130-секундный тайм-аут убивает мой вызов службы потоковой передачи WCF?
Ответ 4
От этот ответ, и что я могу прочитать здесь, он выглядит например, вы хотите создать настраиваемую привязку http и установить атрибут inactivityTimeout
.
Из статьи MSDN:
<bindings> <customBinding> <binding name="Binding1"> <reliableSession acknowledgementInterval="00:00:00.2000000" enableFlowControl="true" maxTransferWindowSize="32" inactivityTimeout="00:10:00" maxPendingChannels="128" maxRetryCount="8" ordered="true" /> <security mode="None"/> <httpTransport authenticationScheme="Anonymous" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" proxyAuthenticationScheme="Anonymous" realm="" useDefaultWebProxy="true" /> </binding> </customBinding> </bindings>
Ответ 5
Как насчет этого? Кажется, это может быть функция вашего сервера IIS и не имеет никакого отношения к службе WCF? Я знаю, что эта ссылка относится к IIS6, но, возможно, она служит основой для чего-то подобного в IIS7? http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/73566f83-c257-4941-8ed8-7ae45b2e7985.mspx?mfr=true