none
sendTimeout en Cliente de WCF, Urgente RRS feed

  • Pregunta

  • Buenos Dias,

    Necesito ayudaaaa, resulta que tengo un servicio con WCF, cuando lo pruebo directamente desde visual Studio puedo ver el archivo de configuracion del cliente en el cual modifico el timeout y demas. Asi funciona bien.

    Pero cuando ejecuto el programa desde la terminal portatil me genera esta excepcion:

    System.TimeoutException: The request channel timed out while waiting for a reply after 00:01:00. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding.

     

    Modifique el archivo de configuracion asi:

    <client>
      <endpoint address="http://192.168.0.4/WSFieldSoftDynamo/SyncService.svc"
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDynamoCacheSyncContract"
      contract="DynamoServiceLibrary.IDynamoCacheSyncContract" name="BasicHttpBinding_IDynamoCacheSyncContract" />
     </client>
    
     <bindings>
      <binding name="BasicHttpBinding_IDynCacheSyncContract" closeTimeout="00:07:00"
       openTimeout="00:07:00" sendTimeout="00:07:00" maxBufferSize="50000000"
       maxReceivedMessageSize="50000000">
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
       maxBytesPerRead="4096" maxNameTableCharCount="16384" />
       <security>
       <transport>
        <extendedProtectionPolicy policyEnforcement="Never" />
       </transport>
       </security>
      </binding>
      </basicHttpBinding>
     </bindings>
    

    Se supone que ya modifique la configuracion para el cliente, publique el servicio y volvi a  generar el proxy, pero la excepcion continuaaa!

    Donde modifico el SendtimeOut??

     

    Ayuda porfa :S

    viernes, 27 de mayo de 2011 15:07

Respuestas

  • Gracias a mi misma por la solucion!!!!

     

    Por si algun dia alguien lo necesita:

    Modificamos el CreateDefaultBinding que genera por defecto el proxy

    public static System.ServiceModel.Channels.Binding CreateDefaultBinding(long messageSize)
        {
          System.ServiceModel.Channels.CustomBinding binding = new System.ServiceModel.Channels.CustomBinding();
          binding.Elements.Add(new System.ServiceModel.Channels.TextMessageEncodingBindingElement(System.ServiceModel.Channels.MessageVersion.Soap11, System.Text.Encoding.UTF8));
          //Se cambia el httpstransportbindingelement por HttpTransportBindingElement . Esto viene diferente en la clase que genera el NecCFsvcutil.exe
          System.ServiceModel.Channels.HttpTransportBindingElement httpBinding = new System.ServiceModel.Channels.HttpTransportBindingElement();
          
          httpBinding.MaxReceivedMessageSize = messageSize;
    
          binding.SendTimeout = System.TimeSpan.FromMinutes(5);
          binding.ReceiveTimeout = System.TimeSpan.FromMinutes(5);
          binding.CloseTimeout = System.TimeSpan.FromMinutes(5);
    
          binding.Elements.Add(httpBinding);
    
          return binding;
        }
    

    viernes, 27 de mayo de 2011 20:23

Todas las respuestas

  • Alguien que ssepa de WCF? :( :(
    viernes, 27 de mayo de 2011 18:01
  • Gracias a mi misma por la solucion!!!!

     

    Por si algun dia alguien lo necesita:

    Modificamos el CreateDefaultBinding que genera por defecto el proxy

    public static System.ServiceModel.Channels.Binding CreateDefaultBinding(long messageSize)
        {
          System.ServiceModel.Channels.CustomBinding binding = new System.ServiceModel.Channels.CustomBinding();
          binding.Elements.Add(new System.ServiceModel.Channels.TextMessageEncodingBindingElement(System.ServiceModel.Channels.MessageVersion.Soap11, System.Text.Encoding.UTF8));
          //Se cambia el httpstransportbindingelement por HttpTransportBindingElement . Esto viene diferente en la clase que genera el NecCFsvcutil.exe
          System.ServiceModel.Channels.HttpTransportBindingElement httpBinding = new System.ServiceModel.Channels.HttpTransportBindingElement();
          
          httpBinding.MaxReceivedMessageSize = messageSize;
    
          binding.SendTimeout = System.TimeSpan.FromMinutes(5);
          binding.ReceiveTimeout = System.TimeSpan.FromMinutes(5);
          binding.CloseTimeout = System.TimeSpan.FromMinutes(5);
    
          binding.Elements.Add(httpBinding);
    
          return binding;
        }
    

    viernes, 27 de mayo de 2011 20:23
  • Hola Viviana,

     En principio la solución que planteás primero debería funcionar, estás segura que al generar de nuevo el proxy no apunta a otro binding? si podés mostrar todo el archivo de configuración seguro podemos encontrar una solución esto yo lo hago con frecuencia y funciona.

    Por otro lado forzar los parámetros por código te quita flexibilidad, tal vez no te interese tenerla pero es un detalle a tener en cuenta.

    lunes, 30 de mayo de 2011 12:32
  • Hola, apenas hoy vi la respuesta jejejeje.

    Pero pues por si alguien se pregunta lo mismo que me dice Leonardo, la respuesta es: lo que va en los timeout del binding, lo deje parametrizable desde la aplicacion, en el ejemplo los coloque en 5 como para no enredar el codigo jejeje.

    viernes, 17 de agosto de 2012 20:35