lunes, 2 de junio de 2014

Request Entity Too Large (413) WCF Solucionado !!!!!

Saludos  En el desarrollo .NET regularmente nos encontramos con problemas en este caso con el error "Request Entity Too Large". Este problema lo recibimos regularmente al intentar consumir un WCF desde otra aplicación.

Este problema se debe principalmente a que el servicio web que estamos consumiendo no esta configurado para aceptar mas de 65.536 bytes que es el valor predeterminado.

 

Solución.

La solución es configurar el web.config del servidor donde esta alojado el servicio WCF.

Agregamos elementos en el web.config de la aplicación dentro de <system.serviceModel>

1.- Se agrega un elemento binding al web.config

    <bindings>
      <basicHttpBinding>
       <binding name="TransferService" maxReceivedMessageSize="2147483647" >
        </binding>
      </basicHttpBinding>
    </bindings>

Esta es la parte importante y que realmente soluciona el problema, la parte marcada en roja es un binding con el nombre "TransferService" (Podemos usar cualquier nombre), y "maxReceivedMessageSize" que especifica el tamaño en bytes que podemos recibir o en su caso retornar del servicio web.
1 Byte = 8 Bits
1 Kilobyte = 1024 Bytes
1 Megabyte = 1048576 Bytes
1 Gigabyte = 1073741824 Bytes
2.- Agregamos los datos del servicio en el web.config.
<services>
      <service name="PROYECTO.wcfServicio">
        <endpoint  address=""
       binding="basicHttpBinding" bindingConfiguration="TransferService"
          contract="PROYECTO.IwcfServicio" >
        </endpoint>
      </service>
    </services>

En esta parte asignaremos la configuración de nuestro binding al servicio que vamos a consumir. los elementos que encontramos en esta parte son:

  • name.- Es el nombre del servicio al que queremos agregarle la configuración el cual podemos identificar por la ruta de nuestro servicio. "PROYECTO.wcfServicio" el nombre de mi proyecto es "PROYECTO" y mi servicio wcf esta en la raíz y se llama "wcfServicio".
  • bindingConfiguration.- Le asignamos el nombre de la configuracionque creamos en el paso uno para que realice los cambios.
  • contract.- Asignamos el nombre de la interface de nuestro servicio WCF el cual es parecido al elemento name pero se agrega una letra "I" al inicio del nombre del servicio, este nos sirve como acceso a los métodos de nuestro web service WCF.
Una vez que hayamos realizado los cambios podemos probar nuevamente el servicio y notaran que ya funciona correctamente.
si requeren mas información les agrego la liga del foro de Microsoft:

3 comentarios:

  1. muchas gracias por tu post, me dió resultado al 100%, al menos hasta ahora. Antes de este post, nuestro WCF solo era capaaz de recibir 25 registros por vez. ahora ya esta recibiendo mas 10 mil registros por vez, y con hartos campos (76).

    ResponderEliminar
  2. que pasa si tengo un array de bytes de 70.500 registros, me sigue dando el mismo errro.
    Quiero enviar un array de bytes de un archivo PDF y no consigo enviarlo ya que me sigue dando error de tamaño. ¿alguna solucion?

    ResponderEliminar