the remote has forcibly forced existing closed been 0x2746 wcf

remote - Una conexión existente fue cerrada a la fuerza por el host remoto-WCF



socketexception 0x2746): an existing connection was forcibly closed by the remote host (11)

Acabo de tener este error ahora solo en el servidor y la solución fue establecer un atributo maxItemsInObjectGraph en wcf web.config en <behavior> etiqueta <behavior> :

<dataContractSerializer maxItemsInObjectGraph="2147483646"/>

Tengo un servicio web WCF que funciona bien. Sin embargo, hay una llamada en particular que está fallando, pero solo falla para ciertos usuarios. La llamada es bastante simple: es una llamada para obtener una lista de objetos Person.

Para el usuario A, funciona bien. El servicio consulta la base de datos, crea la lista de objetos Persona y la devuelve a la aplicación que realiza la llamada.

Para el usuario B falla. Lo extraño es que cuando hago la depuración el servicio parece funcionar bien. Puede consultar la base de datos y crea el objeto List y lo devuelve. El servicio en sí nunca falla. Pero la aplicación del cliente recibe el error "Una conexión existente fue cerrada a la fuerza por el host remoto".

Para mí, parece que algo está sucediendo cuando la capa de servicio está tratando de empaquetar los datos en formato XML para enviar de vuelta a la aplicación de llamada. Estoy pensando que tiene que ser un problema relacionado con los datos porque la llamada funciona bien para otros usuarios. He visto visualmente los datos y realmente no veo nada extraño. Una suposición es que los datos para el Usuario B tienen algunos caracteres ocultos o algo por el estilo y, por lo tanto, están causando que el servicio se cierre inesperadamente. Algo como eso.

¿Algunas ideas?


Capté la misma excepción y encontré una InnerException: SocketException. en el rastro de svclog

Después de mirar en el registro de eventos de Windows vi un error proveniente de la clase System.ServiceModel.Activation.TcpWorkerProcess .

¿Está alojando su servicio wcf en IIS con netTcpBinding y compartiendo puertos?

Parece que hay un error en la función de uso compartido de puertos de IIS, comprueba la fix :

Mi solución es alojar su servicio WCF en un servicio de Windows.


Descubrí que puede obtener este error si el objeto devuelto tiene propiedades auto getter solamente que se inicializan en el constructor (con sintaxis C # 6.0).

Creo que esto se debe a WCF deserializar objetos en el lado del cliente utilizando un constructor sin parámetros y luego establecer las propiedades en el objeto. Necesita tener un set disponible (puede ser privado) para llenar el objeto; de lo contrario, fallará.


Después de sacarme el pelo durante 6 horas como máximo de este error completamente inútil, mi problema terminó siendo que mis data transfer objects eran demasiado complejos. Comience con propiedades súper simples como public long Id { get; set;} public long Id { get; set;} eso es todo ... nada lujoso.


El problema que tuve también fue con la serialización. La causa fueron algunas de mis clases DTO / business y las propiedades se renombraron o eliminaron sin actualizar la referencia del servicio. Me sorprende que no obtuve un contract filter mismatch error lugar. Pero la actualización del servicio ref solucionó el error (el mismo error que OP).


En mi caso, también fue con la serialización. Necesito agregar [KnownType(typeof(...)] para todas las clases que podrían aparecer en la serialización.


He tenido el mismo problema. Mi solución es esta:

Si usa LinQ2SQL en su proyecto, abra su archivo dbml en Visual Studio y cambie el modo de serialización a "Unidireccional" en


Lo mejor que he encontrado para diagnosticar cosas como esta es el visor de seguimiento de servicio. Es bastante sencillo de configurar (suponiendo que pueda editar las configuraciones):

http://msdn.microsoft.com/en-us/library/ms732023.aspx

Espero que esto ayude.


Tuve este problema al comenzar a depurar de un proyecto web a un servicio web en la misma solución. El servicio web devolvía respuestas que el proyecto web no podía entender. Volvería a funcionar en algunos puntos, luego se detendría nuevamente.

Fue porque no había una referencia explícita entre estos proyectos, por lo que el servicio web no se estaba creando al presionar F5 para iniciar la depuración. Una vez que agregué eso, los errores desaparecieron.


Tuve este problema porque mi sitio web no tenía un certificado vinculado al puerto SSL. Pensé en mencionarlo porque no encontré esta respuesta en ningún lugar de googleweb y tardé horas en descifrarlo. No apareció nada en el visor de eventos, lo que fue totalmente increíble para diagnosticarlo. Espero que esto le ahorre a alguien más el dolor.


He visto esto una vez. ¿Los usuarios están solicitando diferentes cantidades de datos? Descubrí que incluso si puede configurar un enlace para cargas útiles de datos (es decir, maxReceivedMessageSize ), httpRuntime maxRequestLength sobre la configuración de WCF, por lo que si IIS intenta atender una solicitud que excede eso, muestra este comportamiento.

Piensa en esto, de esta manera:

Si maxReceivedMessageSize tiene 12 MB en su comportamiento de WCF y maxRequestLength tiene 4 MB (valor predeterminado), IIS gana.