none
The socket connection was aborted RRS feed

  • Pregunta

  • Hola, les comento mi problema, haciendo una aplicación en wcf duplex

    levanto mi servicio y mi cliente, y los primeros minutos funciona muy bien,

    pero después de un rato, los mensajes empiezan a llegar muy tarde, se alenta mucho

    y me provoca los siguientes errores, alguien podría apoyarme en esto?

    muchas gracias!!!

     

    The socket connection was aborted. This Could be caused by an Error processing your message or a receive timeout being exeeded by the remote host, or an underlying resource issue. Local socket was '00:01:00'

     

    y también a veces me da otro error:

    The sokect transfer timed out after 00:01:00. You have exceeded the timeout set in your binding. The time allotted to this operation may have been a portion of a longer timeout.

     

    los dos errores al final del stacktrace me ponen

     

    at. WCFDUPLEX.IServicio.CallBak.HearbetRecibido<String mensaje>

    at. WCFDUPLEX.Servicio.PublicarHearbeat<string mensaje>

     

    ya intenté de todo, por ejemplo

     

     

     ((IContextChannel)callback).OperationTimeout = new TimeSpan(0, 0, 240);
    
                  
    ((IContextChannel)callback).AllowOutputBatching = false;
    
    

     

     

    algunos otros foros también dicen que haga

     

     

     

      <binding name="b1" maxReceivedMessageSize="8000000">
    
    
    y
    
     <readerQuotas maxStringContentLength="2147483647"
                            maxNameTableCharCount="2147483647"
                            maxArrayLength="2147483647"
                            maxBytesPerRead="2147483647"/>
    
    

     

     

    al cliente ya también le hice lo siguiente...

     

    <configuration>
        <system.serviceModel>
            <bindings>
                <netTcpBinding>
                    <binding name="NetTcpBinding_IServicio" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                        transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                        hostNameComparisonMode="StrongWildcard" listenBacklog="200"
                        maxBufferPoolSize="1048576" maxBufferSize="10485760" maxConnections="200"
                        maxReceivedMessageSize="65536">
                        <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
                            maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                        <reliableSession ordered="true" inactivityTimeout="10:10:00"
                            enabled="false" />
                        <security mode="None">
                            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                            <message clientCredentialType="Windows" />
                        </security>
                    </binding>
                </netTcpBinding>
            </bindings>
            <client>
                <endpoint address="net.tcp://localhost:4502/Servicio" binding="netTcpBinding"
                    bindingConfiguration="NetTcpBinding_IServicio" contract="ServiceReference1.IServicio"
                    name="NetTcpBinding_IServicio" />
            </client>
        </system.serviceModel>
    </configuration>
    


     

    pero nada de esto funciona hasta ahora

    que mas puedo hacer.

     

    porque se me complica tanto, que hicieron en WCF que a medio mundo le provoca este error?

    empiezo a enojarme con Microsoft jejeje





    existe una aplicacion serviceTraceViwer que me entrega lo siguiente y que no me ayuda en nada....

    Error de TCP (995: La operación de E/S se anuló por una salida de subproceso o por una solicitud de aplicación) al transmitir datos

    otro error:

    El mensaje con To 'net.tcp://localhost:4502/Servicio/mex/mex' no se puede procesar en el destinatario debido a una falta de coincidencia de AddressFilter en EndpointDispatcher. Compruebe que los valores de EndpointAddresses concuerdan en el remitente y el destinatario.

    Se anuló la conexión de socket. La causa puede ser un error en el procesamiento del mensaje, que se superó el tiempo de espera de recepción en el host remoto, o bien un problema de recursos de red subyacente. El tiempo de espera de socket local era '10675199.02:48:05.4775807'.

     

     

     


    domingo, 13 de noviembre de 2011 21:32

Todas las respuestas

  • Hola Omar,
    Porque no revisas los tiempos de envio
    binding name="NetTcpBinding_IServicio" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
    Concretamente open y send.
    De todas formas que volumen de información estás mandando, es muy grande ? Si es así deberías de plantearte pasar menos información es decir hacer más peticiones pero más pequeñas.
    Otra tecnica que yo suelo hacer es la de hacer reintentos. Es decir controlo el error y si se da ese error espero un tiempo y vuelvo ha realizar la petición.
    Saludos,

    phurtado
    lunes, 14 de noviembre de 2011 11:33
  • El tamaño del paquete que estoy enviando es muy pequeño

    es un hearbeat que envía cada segundo un string = "-";

    y de vez en cuando otros mensajes, pero son pequeños,

    mando mensajes con información:  Monto, tasa, Cliente, Id, 

    ya es todo, como verás no son grandes archivos de información

     

    y trabaja bien un rato, pero después de un tiempo, que será unos 20 mintuos

    se va alentando bien feo, hasta que se muere con los mensajes de arriba.

    no dejo nada en memoria, o sea, un cliente manda un mensaje, y lo redistribuye a todos y ya

     

     

    los atributos que comentas, no los tengo definidos en el app.config del servicio, porque son valores por default, sin embargo en el cliente si lo tiene tal cual indicas

     

    <strong>closeTimeout</strong>="00:01:00"
                        <strong>openTimeout</strong>="00:01:00" <strong>receiveTimeout</strong>="00:10:00" <strong>sendTimeout</strong>="00:01:00"
    


    de plano, WCF no sirve o que?

    AGRADEZCO CUALQUIER APORTACIÓN!!! TKS

     

     

     

    lunes, 14 de noviembre de 2011 13:13
  • Hola Omar,

    Pero si te esta dando este error 

    The socket connection was aborted. This Could be caused by an Error processing your message or a receive timeout being exeeded by the remote host, or an underlying resource issue. Local socket was '00:01:00'

    como bien indicas los tienes por defecto y ese es el valor por defecto, con lo cual, por lo que sea se sobrepasa el tiempo de 00:01:00 cámbialo  y nos dices que tal. 

    Has probado a implementar lo que te he dicho de hacer reintentos.

    Una pregunta el hearbeat para que lo envías, que intentas conseguir con eso.

    Saludos,


    phurtado
    lunes, 14 de noviembre de 2011 14:20
  •  

    Con el Hearbet lo que intento hacer es que no se desconecte, de lo contrario, pasados 10 minutos se muere el servicio, aun cuando incremento el tiempo 

    inactivityTimeout="10:10:00"

    de todas formas, el servicio muere cada 10 minutos,

    Por un lado, y por otro, con el hearbet cada segundo, actualizo la hora del sistema

    y con ello estoy seguro que la aplicación sigue funcionando, cuando la hora para,

    veo el servicio, y pues también ha parado.

     

    también he cambiando el tiempo donde lo indicas, le he puesto horas, pero sigue actuando de la misma forma

    lo que he leído por allí es que por un lado

    el servicio es sincrono, y el cliente lo estoy configurando asíncrono 

    pero no he llegado a mas

    no se si esté bien configurar al cliente de forma Asincrona 

    en unas clases que tuve de wcf, el prof nos recomento

    generar las operaciones Asincronas y el collection type : Generic.List

     

    tons no se que onda todavía

    ayudame pls 


    lunes, 14 de noviembre de 2011 18:10
  • Hola Omar,

     

    Creo que el servicio se muere por esto.

     

    reliableSession ordered="true" inactivityTimeout="10:10:00"

                            enabled="false" 

     

    Respecto a la forma que sea asíncrona no veo ningún problema.

     

    Puedes dejarnos en algún sitio el servicio, cliente y servidor con alguna prueba unitaria y mirar que es lo que está pasando.

     

    Con lo cual si te ayudo, pero de esta forma es difícil, sin más información. Sabes con hacer trazas y ver exactamente donde se produce el error.

     

    en unas clases que tuve de wcf, el prof nos recomento

     

    generar las operaciones Asincronas y el collection type : Generic.List

     

    Esto que te comento el profesor está bien,  tu puedes generarlas asincronas y después llamar a las operaciones síncronas y por eso no creo que el servicio te de problemas de timeout.

     

    Eso de estar chequeando cada segundo el servicio, a mí personalmente no me gusta y te he de ser sincero, que la experiencia que tengo con wcf duplex no fue muy positiva.

     

    Saludos,


    phurtado
    lunes, 14 de noviembre de 2011 21:43
  • el proyecto esta en

    https://skydrive.live.com/?cid=F56D8D6146B2E5A3&id=F56D8D6146B2E5A3%21975#!/?cid=f56d8d6146b2e5a3&sc=documents&uc=1&id=F56D8D6146B2E5A3%21975

    se llama Rondas.7z

     

    Si lo pruebas de forma local funciona, pero si lo ejecutas en un ambiente fuera del desarrollo

    preferentemente IP publica, es cuando le metes "carga" varios clientes

     

    el servicio está en ConsolAplpication

    para que corra el cliente debes levantar ese ejecutable.

    1.- convocas una ronda (con valores de 1 a todos los campos)

    2.- metes un valor de 1 en participante, y luego puedes esperar los cronometros

    3.- cuando se active el bit, metes una tasa, esperas el 3er cronometro y le das mios

    es todo. puedes volver a limpiar y jugar de nuevo.

     

     

    oye, me interesa un poco porque no te fué tan positivo?

    que broncas has encontrado?, WCF no ha madurado 100%?

     

    Es mejor crear una consola, crear mi propio servidor de sockets a la "antigua" y mandar cadenas de texto?

     

    saludos

     

    martes, 15 de noviembre de 2011 15:45
  •  hace tiempo me dijiste que habías hecho un sistema con wcf

    sin problemas, con paginación y un tal REST no se que.

    y que a nivel nacional te había funcionado bien,

    entonces que pasa con esa mugre cosa de WCF

    espero Microsoft sepa de sus broncas

     

    martes, 15 de noviembre de 2011 15:54