SISTEMAS MS

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:
 
 

2 comentarios:

  1. Hola buenas tardes,


    Tengo el mismo problema Request Entity Too Large (413) WCF,ya realize las configuraciones sugeridas pero aun tengo el mismo inconveniente,les agradezco si pueden ayudar la verdad he intentado muchas configuraciones en el servicio pero no he llegado a la solución,estoy convirtiendo un pdf a string base 64 y lo estoy enviando a través de un servicio web,les comparto mi configuración en el servicio.













    Muchas gracias

    ResponderEliminar
  2. Buenos días, hace una semana más o menos empecé a tener este inconveniente, describo mi escenario, tengo 2 proyectos, 1 para la Web y 1 para el Webservice, tengo una archivo excel en donde el usuario ingresa los datos que desea registrar, este archivo al momento de subir lee uno por uno los registros del arhivo excel y los va insertando a una entidad tipo lista que es un atributo de otra entidad, anteriormente se enviaba todos los registros de esa entidad atributo de otra entidad cómo parte de los parámetros de un método del webservice, inicialmente con 10 registros no hubo problema, probamos con 40 y ningún problema, decidimos probar con 100 y apareceió el mensaje de error interno del servidor 413 entity too large, lo que se hizo fue que en el método invocado del webservice se lea el archivo excel y luego enviar cómo una entidad tipo lista cómo parámetro a la capa de negocio, sin embargo se presentaron los mismos errores con 100 registros, ahora el incoveniente se debe a que se hacen múltiples llamadas a una método para guardar en una tabla de una base de datos, lo que se procedió a realizar fue crear 1 tabla que actue cómo tabla temporal para enviar cómo parámetro en el método en el sp de la base de datos, también se crearon 2 entidades más en la capa de entidades, una entidad con los mismos campos de la tabla temporal y otra entidad de tipo List, IEnumerable que recorrerá todos los registros de la tabla temporal, una vez terminado esto se podrá insertar n registros en la tabla de la base de datos y esto evitará múltiples llamadas a un sp de la base de datos. Espero que esta información les haya servido.

    ResponderEliminar