2012-06-17 18 views
35

Parece que no puedo obtener mi servicio WCF para aceptar grandes cantidades de datos que se envían hasta él.WCF service maxReceivedMessageSize basicHttpBinding issue

Configuré el maxReceivedMessageSize para el cliente y podría recibir grandes datos de forma sencilla, ese no es el problema. Está enviando datos al servicio.

Intenté configurar el servicio pero no he tenido suerte. Aquí está mi web.config:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true"/> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
      <serviceDiscovery /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service name="Service.IService"> 
     <clear /> 
     <endpoint binding="basicHttpBinding" bindingConfiguration="MessageSizeBasic" contract="Service.IService" /> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="MessageSizeBasic" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
      maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     </binding> 
     </basicHttpBinding> 
     <webHttpBinding> 
     <binding name="MessageSizeWeb" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" /> 
     </webHttpBinding> 
    </bindings> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

Respuesta

61

la supresión del nombre de su unión hará que se aplica a todos los puntos finales, y debe producir los resultados deseados. Como así:

<services> 
    <service name="Service.IService"> 
    <clear /> 
    <endpoint binding="basicHttpBinding" contract="Service.IService" /> 
    </service> 
</services> 
<bindings> 
    <basicHttpBinding> 
    <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
     maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    </binding> 
    </basicHttpBinding> 
    <webHttpBinding> 
    <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" /> 
    </webHttpBinding> 
</bindings> 

en cuenta también que me quita el atributo bindingConfiguration desde el nodo de punto final. De lo contrario, obtendrías una excepción.

Esta misma solución se encontró aquí: Problem with large requests in WCF

+1

Muchas gracias. Como nota, también tuve que eliminar el atributo bindingConfiguration de mi punto final ya que hacía referencia a un nombre que saqué. – BlargleMonster

+1

Las soluciones proporcionadas no funcionan para mí. – Arti

+0

¿Qué más debo hacer además de los cambios anteriores en web.config? – Arti

0

es el nombre de la clase de servicio realmente IService (en el espacio de nombres de servicio)? Lo que probablemente tenía originalmente era una discrepancia en el nombre de la clase de servicio en el atributo name del elemento <service>.

+0

Mi interfaz de servicio realmente es IService en este momento. Puedo cambiarlo más tarde, pero por ahora es un singleton en mi sistema. – BlargleMonster

+1

El servicio * interfaz *, o el servicio ** clase **? El valor del atributo 'name' para el elemento' 'debe ser el nombre del servicio ** class **. – carlosfigueira

+0

Probé esas opciones y es otra posible solución. No estoy seguro de por qué la herramienta Editor de configuración del servicio solo me permite elegir la interfaz cuando administro mi servicio, pero me complace saber otra forma de solucionarlo si necesito usar nombres nuevamente. – BlargleMonster

0

Al utilizar HTTPS en lugar de en la unión, lo puso en la unión con la etiqueta httpsTransport:

<binding name="MyServiceBinding"> 
     <security defaultAlgorithmSuite="Basic256Rsa15" 
       authenticationMode="MutualCertificate" requireDerivedKeys="true" 
       securityHeaderLayout="Lax" includeTimestamp="true" 
       messageProtectionOrder="SignBeforeEncrypt" 
       messageSecurityVersion="WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10" 
       requireSignatureConfirmation="false"> 
     <localClientSettings detectReplays="true" /> 
     <localServiceSettings detectReplays="true" /> 
     <secureConversationBootstrap keyEntropyMode="CombinedEntropy" /> 
     </security> 
     <textMessageEncoding messageVersion="Soap11WSAddressing10"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" maxBytesPerRead="4096" 
         maxNameTableCharCount="16384"/> 
     </textMessageEncoding> 
     <httpsTransport maxReceivedMessageSize="2147483647" 
         maxBufferSize="2147483647" maxBufferPoolSize="2147483647" 
         requireClientCertificate="false" /> 
    </binding>