2010-10-05 19 views
8

No tengo problemas para recuperar una gran cantidad de datos, pero enviarlos nuevamente al servicio muestra este error. Intenté agregar el elemento tanto a web.config como a servicereferences.clientconfig y tampoco se lo reconoce. En un momento recibí un mensaje sobre agregar readerQuotas a bindingElementExtensions, pero no encuentro nada útil sobre cómo hacer esto. Encontré mensajes que decían que tenía que modificar el devenv.exe.config y tal, pero al hacer eso rehundí VS. He estado tratando de resolver esto durante dos días, por lo que cualquier ayuda sería apreciada.Otro "La cuota máxima de longitud de contenido de cadena (8192) se ha excedido al leer datos XML." problema con WCF y Silverlight 4

edición: aquí está la sección de unión del web.config:

<bindings> 
    <customBinding> 
    <binding name="QaRiM.Web.Service1.customBinding0"> 
     <binaryMessageEncoding /> 
     <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" /> 
    </binding> 
    </customBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true" /> 
<services> 
    <service name="QaRiM.Web.Service1"> 
    <endpoint address="" binding="customBinding" bindingConfiguration="QaRiM.Web.Service1.customBinding0" 
     contract="QaRiM.Web.Service1" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 

y la servicereferences.clientconfig:

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <customBinding> 
       <binding name="CustomBinding_Service1"> 
        <binaryMessageEncoding /> 
        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" /> 
       </binding> 
      </customBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://localhost:36533/Service1.svc" binding="customBinding" 
       bindingConfiguration="CustomBinding_Service1" contract="ServiceReference1.Service1" 
       name="CustomBinding_Service1" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

Ambos fueron generados por VS.

+0

se puede publicar los elementos de unión de su cliente y los archivos de configuración de servicios? También el punto final para el servicio también, ya que debe hacer referencia al enlace. – Jab

Respuesta

9

Simplemente le falta la configuración del maximum string content length.

Añadir esto a sus atributos de unión (cliente y servidor)

<readerQuotas maxStringContentLength="2147483647" /> 

lo siento, no me había dado cuenta de que este elemento hijo se encuentra bajo la codificación que se utiliza cuando se utiliza una unión costumbre, que parece ser binaryMessageEncoding en su ejemplo. Si no, pruebe las otras codificaciones con la configuración.

<bindings> 
    <customBinding> 
     <binding name="QaRiM.Web.Service1.customBinding0">     
      <binaryMessageEncoding> 
       <readerQuotas maxStringContentLength="2147483647"/> 
      </binaryMessageEncoding> 
     </binding> 
    </customBinding> 
</bindings> 
+1

Ese es el problema, no es un atributo de enlace válido. –

+0

@Jim Perry, por favor, eche un vistazo a la actualización de mi respuesta. – Jab

+0

Eso tampoco funciona. No es válido en la configuración de los servicios y con él en la web.config cada llamada a los servicios bloquea la aplicación. –

1

edición: Esto ahorró un borrador incompleto, lo siento

  1. La sincronización de las definiciones de servicio/cliente es lo que ha hecho pero definitivamente es imprescindible que coinciden.
  2. ¿Estás seguro de que necesitas un enlace personalizado? ¿Has probado usar ws (Dual) HttpBinding como base?
  3. Esta publicación puede ser de interés: silverlight 3 wcf service configuration -- getting maxreceivedmessagesize error, específicamente httpRuntime maxRequestLength = "2147483647" configuración.
  4. Es posible que deba establecer maxBufferPoolSize y maxItemsInObjectGraph. La configuración en la publicación de SO vinculada prácticamente maximizó todo.
  5. No sé si utiliza el método proxy de cliente de ChannelFactory o el método de referencia de servicio, pero es posible que desee ir a la ruta anterior. En las sesiones de depuración, descubrí que ciertos valores de la configuración no se estaban aplicando como pensé, pero mi memoria a corto plazo sobre el tema ya está bastante perdida.
  6. En cierta forma, relacionado con el n. ° 5, puede encontrarse con problemas de WCF Test Client donde el cliente de prueba utiliza enlaces predeterminados para los que no está preparado.
  7. Otro post que pueden ser de interés: http://www.haveyougotwoods.com/archive/2008/04/14/wcf-message-streaming.aspx

Streaming es probablemente la mejor opción en el lado del cliente para evitar el bloqueo de la naturaleza transferMode tamponada. No conozco los detalles de cuán grandes serán los datos de forma consistente, pero su servicio se comportará un poco mejor en el extremo del cliente si fue por esa ruta. Puede encontrar una buena introducción a la configuración del lado del cliente para la transmisión aquí: http://systemmetaphor.blogspot.com/2009/05/using-wcf-to-transfer-large-data-files.html.

Con suerte alguna combinación de lo anterior ayuda a

+0

Al usar el seguimiento de WCF, no se muestra nada útil. Fiddler fue la única razón por la que descubrí que el problema de la longitud máxima del contenido de la secuencia era el problema. Solo estoy adivinando, pero la cuestión sobre bindingElementExtensions parece relevante, simplemente no puedo encontrar información sobre cómo agregarlo correctamente. –

+0

Los bits que se destacaron en los documentos que encontré en Google fueron

+0

Parece que va en la dirección correcta, pero debería poder rastrear por qué la aplicación está fallando en ASP.NET. Solo he usado WCF en la ruta de alojamiento propio y quiero decir que me dio un poco más de libertad para determinar errores extraños como este sin que algo como ASP.NET interfiera (no es así en la mayoría de los casos) –

0

¿Ha intentado fijar la maxStringContentLength dentro de la configuración para el servicio? En mi situación, al configurarlo en el servicio permitía que el cliente de Silverlight utilizara el valor deseado para maxStringContentLength.

Una nota es que si permite cadenas más largas, pero no ajusta el maxReceivedMessageSize, esto también puede causar problemas. El maxReceivedMessageSize necesita ser controlado tanto en el servicio como en el cliente, ya que uno no heredará los valores de otro.

2

Si la cuota longitud máxima Contenido de la serie (8192) se ha superado durante la lectura de datos XML.”Es ignorar la configuración de web.config incluso después de situar también se puede resolver el problema en su código mediante la creación de una instancia de XmlDictionaryReaderQuotas y establecer el MaxStringContentLength al 2147483647

continuación, sólo tiene que utilizar la instancia de XmlDictionaryReaderQuotas visto aquí como mycreatedreaderquota

XmlDictionaryReaderQuotas mycreatedreaderquota = new XmlDictionaryReaderQuotas(); 
     mycreatedreaderquota.MaxStringContentLength = 2147483647; 

     XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(stream, mycreatedreaderquota); 
Cuestiones relacionadas