BadRequest en servicios de datos ADO.NET

En servicios de datos ADO.NET puede haber varios motivos por los que tenemos un error BadRequest en nuestras peticiones. Este tipo de servicios no suele dar mucha información del error que se produce y en alguna ocasiones tenemos que mirar un poco e investigar cual puede ser el motivo.

En el caso de BadRequest con código 400 uno de los motivos puede ser el tamaño del mensaje. Sorprendetemente el tamaño esta limitado por defecto a 65536 bytes. Estamos hablando de tan solo 64KB. En aplicaciones que deban enviar tipos de datos complejos o imagenes este tamaño queda en seguida en insuficiente y es en este momento que recibimos el error BadRequest.

Para solucionarlo debemos configurar el servicio de la siguiente manera:

1) Des del servidor abriendo el web.config añadimos lo siguiente para configurar el servicio para que acepte el volumen en bytes que nosotros deseamos.

<services>
    <!-- The service name below has to be the EXACT Namespace.ClassName of your WCF Data Service-->
    <service name="YourDomainNameHere.YourClassNameHere">
        <!-- The address below must be the EXACT address of your service or blank-->
        <endpoint address ="http://localhost:19766/YourServiceName.svc" binding="webHttpBinding" bindingConfiguration="higherMessageSize" contract ="System.Data.Services.IRequestHandler">
        </endpoint>
    </service>
</services>

2) Necesitas especificar el tamaño en la propiedad maxReceivedMessageSize del elemento binding de la configuración de enlace higherMessageSize

<bindings>
    <webHttpBinding>
        <!-- The maxReceivedMessageSize and the maxBufferSize must both be specified as shown below-->
        <binding name="higherMessageSize" maxReceivedMessageSize ="2048000" maxBufferSize="2048000"/>
    </webHttpBinding>
</bindings>

No olvides que si el servicio se hospeda en un IIS ese mismo tiene limitado el tamaño de las peticiones a 4MB. Por lo tanto debes añadir en el archivo de configuración lo siguiente para equilibrar los valores.

<system.web> 
  <httpRuntime MaxRequestLength="ValueInKiloBytes" />
</system.web>

 

Otros enlaces:

How do I increase the size of data sent to ADO.Net Data Services?

Change max message size in DataServiceContext

 

Advertisements

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s