2009-08-27 13 views
15

Tengo el siguiente app.config del lado del servidor para un servicio WCF:WCF maxReceivedMessageSize no se leen de config

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="default" maxReceivedMessageSize="5000000"> 
      <readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" /> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="Core.TOAService.Service1Behavior" 
     name="Core.TOAService.TOAService"> 
     <endpoint address="" binding="wsHttpBinding" contract="Core.TOAService.ITOAService"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/Core.TOAService/TOAService/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="Core.TOAService.Service1Behavior"> 
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="True"/> 
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

Cuando intento pasar este servicio un archivo bastante grande (sólo ~ 250 KB), consigo una excepción registra en el archivo svclog:

la cuota máxima de tamaño de mensaje para los mensajes entrantes (65536) ha sido superado . Para aumentar la cuota, use la propiedad MaxReceivedMessageSize en , el elemento de enlace apropiado.

Como se puede ver en la sección de unión en la parte superior de la configuración, he tratado de establecer el maxReceivedMessageSize a 5.000.000 pero el servicio sigue pensando que se establece en el valor predeterminado 65536. alguna idea de lo que está mal o ¿cuál es el elemento vinculante "apropiado"?

Respuesta

27

Hay más configuraciones :-) Pruebe "maxBufferPoolSize" y "maxBufferSize" en la etiqueta <binding>.

Pero el problema más grande es: su punto final hace no referencia que la configuración de enlace!

<endpoint address="" 
      binding="wsHttpBinding" contract="Core.TOAService.ITOAService"> 

es necesario agregar una referencia a él para que llegue útil - sólo que calificó de "defecto" no funciona .....

<endpoint address="" 
      binding="wsHttpBinding" 
      bindingConfiguration="default" 
      contract="Core.TOAService.ITOAService"> 

está por delante de sus tiempos ;-) En WCF 4 (con .NET 4.0 - en algún momento posterior de este año 2009), podrá definir "configuraciones de enlace predeterminadas" sin tener que nombrarlas explícitamente y hacer referencia a ellas, pero por ahora, necesita crear un enlace entre su punto final y su enlace y cualquier configuración de enlace (o comportamiento) que tenga!

Marc

+0

Sí, debe hacer referencia a la configuración de enlace. Los cambios en el búfer probablemente no sean necesarios. –

+0

Nunca está del todo claro si realmente se necesita alguno de los tres cambios en el búfer; es útil intentarlo y ver. Realmente no hay una buena documentación exhaustiva y una explicación sobre cómo modificar esas configuraciones, desafortunadamente ... –

+0

¡Doh, me sirve para usar VS2010 para construir un servicio 3.5! Muchas gracias, eso lo solucionó. –

1

Hay varios lugares que usted necesita para configurar el tamaño. En su caso, creo que necesita agregar cuotas de lectura. Aquí está un ejemplo:

<basicHttpBinding> 
    <binding name="httpBasicBinding_Service" closeTimeout="00:03:00" 
     openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00" 
     maxBufferSize="2000001" 
     maxBufferPoolSize="2000001" maxReceivedMessageSize="2000001"> 
     <readerQuotas maxDepth="2000001" maxStringContentLength="2000001" 
     maxArrayLength="2000001" maxBytesPerRead="2000001" maxNameTableCharCount="2000001" /> 
    </binding> 
    </basicHttpBinding> 
15

Si sigue recibiendo este mensaje de error al utilizar el cliente de prueba WCF, es porque el cliente tiene una configuración separada MaxBufferSize .

para corregir el problema:

  1. Haga clic en la nodo archivo de configuración en la parte inferior del árbol
  2. Seleccione Editar con SvcConfigEditor

una lista de Se mostrarán las configuraciones editables, incluido MaxBufferSize.

Nota: generada automáticamenteclientes proxy también establecer MaxBufferSize a 65536 por defecto.

+1

¡Buena captura! Eso resolvió mi problema ... –

+0

¡¡¡GRACIAS YOUUUU !!! – RoeeK

Cuestiones relacionadas