2011-11-13 18 views
6

Dios, ¿no te encanta WCF?WCF BAD solicitada 400 debido a que maxReceivedMessageSize sigue siendo 65536

Leo todos los hilos posibles pero estoy realmente atascado ahora.

Aquí está la configuración de WCF:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BaseHttp" 
        maxBufferSize="4194304" 
        maxBufferPoolSize="4194304" 
        maxReceivedMessageSize="4194304" /> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="TaskServiceBehavior"> 
      <serviceMetadata httpGetEnabled="True" /> 
      <serviceDebug includeExceptionDetailInFaults="True" /> 
     </behavior> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="TaskServiceBehavior" name="TaskService"> 
     <endpoint 
      address="http://www.mysite.com/TableTaskService/TableTaskService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BaseHttp" 
      contract="TableTaskService.ITableTaskService" /> 
     <endpoint 
      address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
       <add baseAddress="http://www.mysite.com/TableTaskService/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <serviceHostingEnvironment> 
     <baseAddressPrefixFilters> 
     <add prefix="http://www.mysite.com/" /> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

Ahora enviar un mensaje y se tiran esta excepción por defecto (sierra en el archivo svclog):

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

Ahora digo claramente que debe ser 4mb.

Mi código de cliente:

TableTaskServiceClient client = 
    new TableTaskServiceClient(
      new BasicHttpBinding { MaxBufferSize = 4194304, 
           MaxReceivedMessageSize = 4194304 }, 
      new EndpointAddress(GetEndpointAddressString()) 
    ); 

Sin embargo, este error tiros 65536 tamaño de mí. ¿De dónde viene? ...

¿También importa REALMENTE que el cliente configure MaxReceivedMessageSize con el mismo valor que el servidor? Creo que sería lógico que el servidor fuera responsable de determinar la longitud, no el cliente.

También hay esta advertencia (observe lo útil que es lo que dice, es decir: no hay información sobre el elemento que se anula o me falta algo), tal vez baschttpbinding es exactamente lo que se anula? pero ¿por qué sería eso? de todos modos:

[TraceRecord] Severidad Advertencia TraceIdentifier http://msdn.microsoft.com/en-US/library/System.ServiceModel.OverridingDuplicateConfigurationKey.aspx Descripción El sistema de configuración ha detectado una clave duplicada en un ámbito de configuración diferente y se anulando con el valor más reciente . dominio de aplicación/LM/W3SVC/11/ROOT/TableTaskService-33-1296567 Fuente System.ServiceModel.Configuration.ServiceBehaviorElementCollection/-851144413 comportamiento ElementName OldElementLineNumber 0 NewElementLineNumber 0

UPDTE: reconfigurar tanto el servicio y el cliente:

TableTaskServiceClient client = new TableTaskServiceClient(
         new BasicHttpBinding { 
          MaxBufferSize = 4194304, 
          MaxReceivedMessageSize = 4194304, 
          MaxBufferPoolSize=4194304, 
          ReaderQuotas = new XmlDictionaryReaderQuotas 
               { 
                MaxArrayLength = 4194304, 
                MaxBytesPerRead = 4194304, 
                MaxDepth = 4194304, 
                MaxNameTableCharCount = 4194304, 
                MaxStringContentLength = 4194304 
               } 
         }, new EndpointAddress(GetEndpointAddressString())); 

Mismo error todavía.

Si esto es cierto interés Estoy enviando un byte [] gama de 467000 ~ longitud

Respuesta

1

Prueba esto:

<basicHttpBinding> 
    <binding name="BaseHttp" 
      maxBufferSize="4194304" 
      maxBufferPoolSize="4194304" 
      maxReceivedMessageSize="4194304"> 
    <readerQuotas maxArrayLength="4194304" 
        maxBytesPerRead="4194304" 
        maxDepth="4194304" 
        maxNameTableCharCount="4194304" 
        maxStringContentLength="4194304" 
        /> 
    </binding> 
</basicHttpBinding> 

Aunque algunos de esos ajustes no tienen sentido, simplemente los configuro con un valor grande.

Además, una vez que tenga este funcionamiento, le sugiero que recorte los valores, ya que están presentes para evitar DoS attacks en su sitio.

+0

Mismo error. Confirmé un par de veces que esta configuración se usa en la configuración del servicio (se cambió a BaseHttp1, se produjo un error, se cambió de nuevo, el servicio funciona bien en el navegador), y sigue siendo el mismo. Creo que debería estar funcionando ... pero simplemente no funciona. –

+0

¿Está configurando el servicio y el cliente? Porque apostaría que hay una configuración de límite en el lado del cliente también. –

+0

sí reconfigurado ambos lugares. –

Cuestiones relacionadas