.net - protocolo - no se pudo distribuir el mensaje porque el servicio en la dirección de extremo
Cómo establecer mantener vivo el intervalo para la conexión HTTP en WCF (6)
¿Qué tal esto? Parece que puede ser una función de su servidor IIS y no tiene nada que ver con el servicio WCF? Sé que este enlace se aplica a IIS6, pero ¿tal vez sirve de base para algo similar en IIS7? http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/73566f83-c257-4941-8ed8-7ae45b2e7985.mspx?mfr=true
El canal de transporte HTTP en WCF utiliza conexiones HTTP persistentes de forma predeterminada. ¿Cómo controlar mantener vivo el tiempo de espera para esas conexiones? El valor predeterminado es 100 s. Encontré ese valor al monitorear la aplicación en Procmon. No he encontrado ninguna configuración en el elemento de enlace de transporte http que configura este tiempo de espera. ¿Hay alguna clase .NET que pueda controlar ese tiempo de espera?
A partir de esta respuesta , y lo que puedo leer here , parece que desea crear un enlace http personalizado y establecer el atributo inactivityTimeout
.
Del artículo de 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>
Echa un vistazo aquí:
Hay una discusión detallada de cómo manipular la propiedad keep alive durante una conexión http.
Encontré la solución para esto. El problema es que el kernel subyacente http.sys tiene su propio tiempo de espera y romperá la conexión.
http://mmmreddy.wordpress.com/2013/07/11/wcf-use-of-http-transport-sharing-persistent-tcp-sessions/
netsh http add timeout timeouttype=idleconnectiontimeout value=120
Además, esta pregunta es similar a la siguiente: ¿Qué tiempo de espera de 130 segundos es la cancelación de mi llamada al servicio de transmisión de WCF?
La configuración de ServicePoint.MaxIdleTime debería permitirle cambiar el tiempo de espera de inactividad predeterminado de 100 segundos en las conexiones HTTP persistentes.
https://www.visualbasicplanet.info/windows-communication/configuring-http-connections.html
Me parece que quieres ajustar el encabezado HTTP de Keep-Alive
. Debería leer este artículo sobre HTTP keep-alive y primero determinar si realmente vale la pena dedicarle tiempo.
Si es así, intente crear un inspector de mensajes . Esto debería permitirle modificar los encabezados HTTP para cada mensaje que se envía:
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;
}
// ...
}