2011-02-18 19 views
9

Bien, así que configuré y probé un buen servicio WCF. El cliente crea una cadena y la pasa a un método en el servicio y luego el servicio la guarda como un archivo. Funciona perfectamente con pequeñas cantidades de datos de prueba, pero cuando lo intento con lo que se supone que debe hacer - pasar algunos objetos .NET serializados - se cae, con el error¿Dónde se aumenta maxStringContentLength para que WCF pase cadenas grandes?

El formateador inició una excepción mientras intentar deserializar el mensaje: Error en la deserialización del cuerpo de la solicitud mensaje para la operación cadena máxima cuota de longitud de contenido (8192) se ha excedido al leer datos XML. Esta cuota se puede aumentar cambiando la propiedad MaxStringContentLength en los XmlDictionaryReaderQuotas objeto que se utiliza cuando se crea el lector XML

Así que Goggle esto y encontramos que la propiedad MaxStringContentLength debe fijarse en una etiqueta "readerQuotas" dentro de la etiqueta de la archivo de configuración, como este:

 <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 

Así que lo cambio. Lo cambio en el archivo App.config de mi cliente. Lo cambio en el archivo App.config y en el archivo Web.config de mi servidor. Lo cambio en el archivo App.config del proyecto de prueba de mi unidad. Y nada de eso funciona, sigo recibiendo el mismo error.

Interesante, y frustrante, cuando encendí WcfClient.exe para echar un vistazo a mi servicio, me puse en contacto con él y eché un vistazo al archivo de configuración (Client.dll.config), me di cuenta de que este auto -generated archivo contenía ninguno de mis cambios y se ha restablecido a:

<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 

no tengo ni idea de dónde se está haciendo desde estos valores - en ninguna parte de toda mi solución se está estableciendo éstos. Por lo tanto, debe ser el uso de valores predeterminados, pero no entiendo por qué está utilizando valores predeterminados cuando he proporcionado archivos de configuración personalizados tanto en el servidor como en el cliente.

¿Alguien me puede ayudar a desenredar esto?

+1

puede publicar la configuración para el enlace donde coloca el elemento' readerQuotas'? – vlad

Respuesta

4

1) ¿Es posible que su punto final no haga referencia al enlace personalizado? ¿Podría publicar sus secciones de enlace y punto final?

2) WcfTestClient no utiliza su servicio o configuraciones de cliente para establecer su propia configuración. Deberá editar manualmente Client.dll.config con SvcConfigEditor para configurar los datos del enlace del cliente WcfTestClient antes de ejecutar el servicio.

Puedes continuar con los cambios de configuración de WcfTestClient si miras el menú Herramientas -> Opciones. Para obtener más información sobre WcfTestClient, mira esto: http://msdn.microsoft.com/en-us/library/bb552364.aspx

0

También es necesario aumentar la maxReceiveMessageSize etc en la propia unión como esta ...

nombre del enlace = "BasicHttpsBinding_IService1" maxReceivedMessageSize = "34000000" maxBufferPoolSize =" 34000000 "maxBufferSize =" 34000000 "

Cuestiones relacionadas