2011-09-19 8 views
8

que he visto este problema registró un millón de veces, pero ninguna de las soluciones han trabajado para mí ... Así que aquí voy:Problema con grandes peticiones en WCF

Al llamar a un servicio WCF me sale el siguiente de error:

The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://BlanketImportService.ServiceContracts/2011/06:request . The InnerException message was 'There was an error deserializing the object of type BlanketImport.BlanketImportRequest. The maximum array length quota (16384) has been exceeded while reading XML data. This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 44440.'. Please see InnerException for more details.

he modificado el readerQuotas tanto en el servidor del cliente, y se aplica la etiqueta bindingConfiguration.

Aquí está la configuración del servidor:

<bindings> 
    <basicHttpBinding> 
    <binding name="BilagImportBinding" maxBufferSize="2147483647" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<services> 
    <service name="BlanketImport"> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" bindingNamespace="http://BlanketImportService.ServiceContracts/2011/06" contract="BlanketImport.IBlanketImport"> 
    </endpoint> 
    </service> 
</services> 

Y la configuración del cliente:

<bindings> 
    <basicHttpBinding> 
     <binding name="BilagImportBinding" maxBufferSize="2147483647" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <client> 
    <endpoint address="http://localhost/BlanketImport/BlanketService.svc" 
     binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" contract="BlanketServiceReference.IBlanketService" 
     name="BasicHttpBinding_IBlanketService" /> 
    </client> 
+0

¿El nombre del servicio es simplemente "BlanketImport", o está debajo de un espacio de nombres (como BlanketImport.BlanketImport)? El valor del atributo "nombre" del elemento '' debe ser * full-qualified-name * del servicio (namespace + type name), de lo contrario WCF no lo encontrará. – carlosfigueira

+0

Es 2015 y la configuración de wcf sigue siendo un enigma para la mayoría de nosotros. – abhi

Respuesta

18

encontrado la solución ... Pero sigue siendo muy extraño!

Si elimino el atributo de nombre de mi etiqueta de enlace y el atributo bindingConfiguration de mi etiqueta de punto final, todo funciona. Esto significa que la configuración basicHttpBinding es la configuración predeterminada para todos los puntos finales basicHttpBinding

+1

Excelente: si marca su propia solución como solución, obtendrá una insignia. :) – Lars

+0

¡Gracias por la solución! La configuración de WCF es demasiado complicada –

+0

Pasé 3 días trabajando en el mismo problema hasta que encontré su solución. ¡¡¡Gracias!!! – Copeleto

2

Tuve el mismo problema al intentar cargar archivos usando WCF usando una configuración de enlace con nombre. Esto tiene que ver con los cambios en WCF 4.0 y la configuración "simplificada" (ver MSDN)

FYI: He intentado todo para resolver este problema; el parámetro para el servicio era una matriz de bytes, por lo que la eliminamos y usamos una secuencia, intentamos cambiar el modo de almacenamiento en búfer frente a la transmisión y obviamente las 1,5 millones de opciones de configuración para cambiar los tamaños que nunca se recogieron con una configuración con nombre.

Muy extraño, pero trabajando con su sugerencia.

+0

+1 para el enlace –

0

Tuve un problema similar en el que el extremo no usaba el enlace con nombre. Mi problema fue un error tipográfico en el nombre del servicio. Como dijo Livewire, la configuración simplificada de WCF 4 crea automáticamente un punto final y mi punto final definido no lo sobrescribió.

Cuestiones relacionadas