Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

HTTP. SYS forzosamente desconecta enlaces HTTP para los servicios WCF alojados en sí mismos

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 3137046
Síntomas
En un servicio de Windows Communication Foundation (WCF) alojadas en un servidor que ejecuta Windows Server 2012 R2 y que utiliza los enlaces basados en HTTP (por ejemplo,basicHttpBinding), el servidor de forma intermitente gotas de la conexión TCP subyacente. Cuando se produce este problema, puede verla en el HTTP. Registros SYS que normalmente se encuentran en la carpeta C:\WINDOWS\System32\LogFiles\HTTPERR. Los archivos de registro deben tener una entrada que cita Timer_MinBytesPerSecondcomo motivo. Este problema no se produce en Windows Server 2008 R2.

La entrada del Registro similar al siguiente:
#Fields: fecha hora c-ip-puerto c s-ip puerto s cs-versión cs-method cs-uri sc-status s siteid s motivo s-NombreCola
fechatiempo 10.145.136.58 41079 10.171.70.136 8888 HTTP/1.1 registrar /MySelfHostedService/TestService1--Timer_MinBytesPerSecond -
fechatiempo 10.145.136.58 41106 10.171.70.136 8888 HTTP/1.1 registrar /MySelfHostedService/TestService1--Timer_MinBytesPerSecond -
fechatiempo 10.145.136.58 40995 10.171.70.136 8888 HTTP/1.1 registrar /MySelfHostedService/TestService1--Timer_MinBytesPerSecond -
fechatiempo 10.145.136.58 41022 10.171.70.136 8888 HTTP/1.1 registrar /MySelfHostedService/TestService1--Timer_MinBytesPerSecond -
En las trazas WCF, el servicio produce un error durante una operación de bytes de recepción con System.Net.HttpListenerException, como en el ejemplo siguiente:
<Exception>
<ExceptionType>System.ServiceModel.CommunicationException, System.ServiceModel, versión = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089</ExceptionType>
<Message>Se intentó una operación en una conexión de red inexistente</Message>
<StackTrace>
en System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()
en System.ServiceModel.Channels.HttpOutput.Close()
en System.ServiceModel.Channels.HttpRequestContext.OnReply (mensaje, tiempo de espera TimeSpan)
en System.ServiceModel.Channels.RequestContextBase.Reply (mensaje, tiempo de espera TimeSpan)
en System.ServiceModel.Channels.HttpRequestContext.SendResponseAndClose (statusCode HttpStatusCode, cadena statusDescription)
en System.ServiceModel.Channels.HttpChannelListener'1.HandleProcessInboundException (Exception ex HttpRequestContext contexto)
</StackTrace>
<ExceptionString>System.ServiceModel.CommunicationException: Se intentó una operación en una red inexistente conexión---&gt; System.Net.HttpListenerException: se intentó una operación en una conexión de red inexistente
en el System.Net.HttpResponseStream.Dispose que se (Boolean disposing)
en System.IO.Stream.Close()
en System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()
---Fin del seguimiento de pila de excepción interna---
en System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()
en System.ServiceModel.Channels.HttpOutput.Close()
en System.ServiceModel.Channels.HttpRequestContext.OnReply (mensaje, tiempo de espera TimeSpan)
en System.ServiceModel.Channels.RequestContextBase.Reply (mensaje, tiempo de espera TimeSpan)
en System.ServiceModel.Channels.HttpRequestContext.SendResponseAndClose (statusCode HttpStatusCode, cadena statusDescription)
en System.ServiceModel.Channels.HttpChannelListener'1.HandleProcessInboundException (Exception ex HttpRequestContext contexto)</ExceptionString>
<InnerException>
<Exception>
<ExceptionType>System.Net.HttpListenerException, sistema, versión = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089</ExceptionType>
<Message>Se intentó una operación en una conexión de red inexistente</Message>
<StackTrace>
en el System.Net.HttpResponseStream.Dispose que se (Boolean disposing)
en System.IO.Stream.Close()
en System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()
</StackTrace>
<ExceptionString>System.Net.HttpListenerException (0 x 80004005): Se intentó una operación en una conexión de red inexistente
en el System.Net.HttpResponseStream.Dispose que se (Boolean disposing)
en System.IO.Stream.Close()
en System.ServiceModel.Channels.HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream.Close()</ExceptionString>
<NativeErrorCode>CD 4</NativeErrorCode>
</Exception>
</InnerException>
</Exception>
Causa
A partir de 2012 R2 de Windows Server, el controlador del núcleo que controla las solicitudes HTTP (http.sys) se cambió en cuanto a cómo controla la propiedadTimer_MinBytesPerSecond. De forma predeterminada, Http.sys considera cualquier tasa de velocidad de menos de 150 bytes por segundo como un ataque potencial de conexión de baja velocidad e interrumpe la conexión de TCP para liberar el recurso. Este problema no se produce en Windows Server 2008 R2 ya que el umbral de una conexión lenta en Windows Server 2012 R2 es mucho más restrictivo.
Solución
Para evitar esta característica, establezca el minSendBytesPerSecond valor 0xFFFFFFFF (máximo de 32 bits sin signo valor entero), que es 4.294.967.295 en formato decimal. Este valor específico deshabilita la característica de conexión de velocidad de velocidad inferior.

Utilice uno de los métodos siguientes para establecer el minSendBytesPerSecond en el valor 0xFFFFFFFF.

Método 1: Usar un archivo de configuración

 <system.net>    <settings>       <httpListener>           <timeouts minSendBytesPerSecond="4294967295" />       </httpListener>    </settings> </system.net>

Método 2: Establecer mediante programación

Cambie la propiedad explícitamente en el código, como en el ejemplo siguiente:

System.Net.HttpListenerTimeoutManager.MinSendBytesPerSecond = 4294967295

La opción de programación puede realizarse en un serviceBehavior personalizado si un cambio de código en el servicio no es una opción. Es decir, un comportamiento puede integrarse con un servicio existente colocando un archivo DLL y cambiando la configuración, como en el ejemplo siguiente:
  1. Abra la solución en Visual Studio y agregue un nuevo proyecto de biblioteca de clases. Asígnele el nombre "BehaviorProject".
  2. Cree una clase denominada "HttpListenerBehavior".
  3. ¿Desea actualizarlo con el siguiente código fuente:
    namespace BehaviorProject{    public class HttpListenerBehavior : BehaviorExtensionElement, IServiceBehavior    {        public override Type BehaviorType        {            get { return this.GetType(); }        }        protected override object CreateBehavior()        {            return new HttpListenerBehavior();        }        public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)        {            return;        }        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)        {                        UpdateSystemNetConfiguration();        }        private void UpdateSystemNetConfiguration()        {            ConfigurationProperty minSendBytesPerSecond;            minSendBytesPerSecond = new ConfigurationProperty("minSendBytesPerSecond",                typeof(long), (long)uint.MaxValue, null, null, ConfigurationPropertyOptions.None);            ConfigurationPropertyCollection properties;            HttpListenerTimeoutsElement timeOuts = new HttpListenerTimeoutsElement();            properties = GetMember(timeOuts, "properties") as ConfigurationPropertyCollection;            if (properties != null)            {                properties.Remove("minSendBytesPerSecond");                SetMember(timeOuts, "minSendBytesPerSecond", minSendBytesPerSecond);                properties.Add(minSendBytesPerSecond);            }        }        public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)        {            return;        }        public static object GetMember(object Source, string Field)        {            string[] fields = Field.Split('.');            object curr = Source;            BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;            bool succeeded = false;            foreach (string field in fields)            {                Type t = curr.GetType();                succeeded = false;                FieldInfo fInfo = t.GetField(field, bindingFlags);                if (fInfo != null)                {                    curr = fInfo.GetValue(curr);                    succeeded = true;                    continue;                }                PropertyInfo pInfo = t.GetProperty(field, bindingFlags);                if (pInfo != null)                {                    curr = pInfo.GetValue(curr, null);                    succeeded = true;                    continue;                }                throw new System.IndexOutOfRangeException();            }            if (succeeded) return curr;            throw new System.ArgumentNullException();        }        public static void SetMember(object Source, string Field, object Value)        {            string[] fields = Field.Split('.');            object curr = Source;            BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public;            bool succeeded = false;            int i = 0;            foreach (string field in fields)            {                i++;                Type t = curr.GetType();                succeeded = false;                FieldInfo fInfo = t.GetField(field, bindingFlags);                if (fInfo != null)                {                    if (i == fields.Length)                        fInfo.SetValue(curr, Value);                    curr = fInfo.GetValue(curr);                    succeeded = true;                    continue;                }                PropertyInfo pInfo = t.GetProperty(field, bindingFlags);                if (pInfo != null)                {                    if (i == fields.Length)                        fInfo.SetValue(curr, Value);                    curr = pInfo.GetValue(curr, null);                    succeeded = true;                    continue;                }                throw new System.IndexOutOfRangeException();            }            if (succeeded) return;            throw new System.ArgumentNullException();        }    }}

  4. Genere la aplicación de biblioteca.
  5. Copie el archivo DLL generado a la carpeta de la aplicación.
  6. Abra el archivo de configuración de aplicación, busque el <system.serviceModel>de la etiqueta y agregue el siguiente comportamiento personalizado:</system.serviceModel>
    <extensions> <behaviorExtensions> <add name="httpListenerBehavior" type="BehaviorProject.HttpListenerBehavior, BehaviorProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </behaviorExtensions></extensions><behaviors> <serviceBehaviors> <!-- if the serviceBehavior used by the service is named, add to the appropriate named behavior --> <behavior name="customBehavior"> <!-- The behavior is referenced by the following in line. Visual Studio will mark this line with a red underline because it is not in the config schema. It can be ignored. Notice that the other behaviors (like serviceMetadata) does not need to be added if they are not currently present --> <httpListenerBehavior /> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors></behaviors>
Más información
Para determinar si los cambios eran eficaces, utilice uno de los métodos siguientes.

Método 1

  1. Capturar un archivo de volcado memoria registro una que se abre el serviceHost.
  2. Volcar el objeto del tipo System.Net.HttpListenerTimeoutManagery leer la propiedadminSendBytesPerSecond .
0:000 >! DumpObj /d 02694a64
Nombre: System.Net.HttpListenerTimeoutManager
MethodTable: 7308b070
EEClass: 72ec5238
Tamaño: 20(0x14) bytes
Archivo: C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
Campos:
Desplazamiento de campo MT tipo VT valor Attr nombre
73092254 4001605 4... escucha de 026932f0 de instancia Net.HttpListener 0
73c755d4 4001606 8 tiempos de espera de 02694a78 de instancia de System.Int32 [] 0
minSendBytesPerSecond de 73c7ef20 de 4001607 c System.UInt32 1 instancia 4294967295<>

Observe que el valor de minSendBytesPerSecond es 4294967295.

Método 2
  1. En modo de administrador, abra cmd.exe y ejecute el siguiente comando desde un símbolo del sistema (una vez abierto serviceHost):

    netsh http Mostrar vista servicestate = "session" > %temp%\netshOutput.txt
  2. Ejecute el siguiente comando para abrir el archivo netshOutput.txt. Se abrirá en el Bloc de notas.

    iniciar %temp%\netshOutput.txt
  3. Buscar el número de puerto de la aplicación de servicio (como 8888) y, a continuación, ver la sesión. Éste es el paso para comprobar que la velocidad mínima (bytes/seg) se reemplaza con el valor de 4294967295 .
  4. Debería ver una entrada similar a la siguiente:

    Id. de sesión de servidor: FE00000320000021
    Versión: 2.0
    Estado: activo
    Propiedades:
    Ancho de banda máximo: 4294967295
    Tiempos de espera:
    Tiempo de espera del cuerpo de entidad (segundos): 120
    Agotar el tiempo de espera del cuerpo de entidad (segundos): 120
    Solicitar tiempo de espera de cola (seg.): 120
    Tiempo de espera de conexión (en segundos) inactivo: 120
    Espera del encabezado (seg.): 120
    Velocidad de envío mínimo (bytes/seg.): 150
    Grupos de direcciones URL:
    Id. de grupo de URL: FD00000340000001
    Estado: activo
    Nombre de la cola de solicitudes: solicitar la cola no tiene nombre.
    Propiedades:
    Ancho de banda máximo: heredado
    Número máximo de conexiones: heredado
    Tiempos de espera:
    Tiempo de espera del cuerpo de entidad (segundos): 0
    Agotar el tiempo de espera del cuerpo de entidad (segundos): 0
    Solicitar tiempo de espera de cola (seg.): 0
    Tiempo de espera de conexión (en segundos) inactivo: 0
    Espera del encabezado (seg.): 0
    Velocidad de envío mínimo (bytes/seg.): 4294967295<>
    Número de direcciones URL registradas: 1
    Direcciones URL registradas:
    HTTP://+:8888/TESTSERVICE1/
Para obtener más información, consulte la Propiedad HttpListenerTimeoutManager.MinSendBytesPerSecond tema en el sitio Web de Microsoft Developer Network.
Nota: es un artículo de "PUBLICACIÓN RÁPIDA" creado directamente por la organización de soporte técnico de Microsoft. La información aquí contenida se proporciona como está, como respuesta a problemas que han surgido. Como consecuencia de la rapidez con la que lo hemos puesto disponible, los materiales podrían incluir errores tipográficos y pueden ser revisados en cualquier momento sin previo aviso. Vea las Condiciones de uso para otras consideraciones

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 3137046 - Última revisión: 03/25/2016 01:19:00 - Revisión: 3.0

Windows Communication Foundation 4.5, Windows Communication Foundation 4

  • kbmt KB3137046 KbMtes
Comentarios