wcf wcf-binding

binding wcf web config



WCF maxReceivedMessageSize no se lee desde la configuraciĆ³n (3)

Tengo una aplicación app.config del lado del servidor para un servicio WCF:

<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 trato de pasar este servicio a un archivo grande (solo ~ 250 KB), recibo una excepción registrada en el archivo svclog:

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

Como puede ver en la sección de enlace en la parte superior de la configuración, intenté establecer maxReceivedMessageSize en 5000000, pero el servicio aún cree que está configurado en 65536 por defecto. Cualquier idea sobre qué es lo que está mal o cuál es el "apropiado" "¿elemento vinculante?


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

Pero el mayor problema es que su punto final no hace referencia a esa configuración de enlace.

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

Necesita agregar una referencia para que se vuelva útil; simplemente llamarlo "predeterminado" no funciona ...

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

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

Bagazo


Hay varios lugares que necesita para establecer el tamaño. En su caso, creo que necesita agregar cuotas de lectura. Aquí hay 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>


Si todavía recibe este mensaje de error mientras utiliza WCF Test Client, es porque el cliente tiene una configuración de MaxBufferSize por separado.

Para corregir el problema:

  1. Haga clic con el botón derecho en el nodo Config File en la parte inferior del árbol
  2. Seleccione Editar con SvcConfigEditor

Aparecerá una lista de configuraciones editables, incluido MaxBufferSize.

Nota: Los clientes proxy generados automáticamente también configuran MaxBufferSize en 65536 de forma predeterminada.