2010-05-25 46 views
7

Mi servicio WCF tiene un contrato de operación que acepta, como parámetro, una matriz de objetos. Esto puede ser bastante grande. Después de buscar soluciones para Bad Request: 400, encontré el verdadero motivo: el tamaño máximo de mensaje.Se ha superado la cuota máxima de tamaño de mensaje para los mensajes entrantes (65536)

Sé que esta pregunta se ha hecho antes en MUCHOS lugares. Probé con lo que todos dicen: "Aumenta los tamaños en los archivos de configuración del cliente y del servidor". Yo tengo. Todavía no funciona. web.config

Mi de Servicio: app.config

<system.serviceModel> 
    <services> 
     <service name="myService"> 
     <endpoint name="myEndpoint" address="" 
        binding="basicHttpBinding" 
        bindingConfiguration="myBinding" 
        contract="Meisel.WCF.PDFDocs.IPDFDocsService" /> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="myBinding" 
       closeTimeout="00:11:00" 
       openTimeout="00:11:00" 
       receiveTimeout="00:15:00" 
       sendTimeout="00:15:00" 
       maxBufferSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       transferMode="Buffered" 
       allowCookies="false" 
       bypassProxyOnLocal="false" 
       hostNameComparisonMode="StrongWildcard" 
       messageEncoding="Text" 
       textEncoding="utf-8" 
       useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="2147483647" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
      <security mode="None" /> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

Mi de Cliente:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_IPDFDocsService" 
       closeTimeout="00:11:00" 
       openTimeout="00:11:00" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:11:00" 
       allowCookies="false" 
       bypassProxyOnLocal="false" 
       hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       messageEncoding="Text" 
       textEncoding="utf-8" 
       transferMode="Buffered" 
       useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="32" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
      <security mode="None"> 
      <transport clientCredentialType="None" 
         proxyCredentialType="None" 
         realm="" /> 
      <message clientCredentialType="UserName" 
        algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:8451/PDFDocsService.svc" 
       behaviorConfiguration="MoreItemsInObjectGraph" 
       binding="basicHttpBinding" 
       bindingConfiguration="BasicHttpBinding_IPDFDocsService" 
       contract="PDFDocsService.IPDFDocsService" 
       name="BasicHttpBinding_IPDFDocsService" /> 
    </client> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="MoreItemsInObjectGraph"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    </system.serviceModel> 

Qué puedo posiblemente faltar o hacer mal? Es como si el servicio estuviera ignorando lo que escribí en el maxReceivedBufferSize.

Gracias de antemano, Kyle

ACTUALIZACIÓN

Aquí hay otros dos preguntas StackOverflow donde nunca recibieron una respuesta, ya sea:

https://stackoverflow.com/questions/2880623/maxreceivedmessagesize-adjusted-but-still-getting-the-quotaexceedexception-with

WCF MaxReceivedMessageSize property not taking

+0

Parece correcto de un vistazo. ¿Estás configurando el punto final en el código en cualquier lugar? Si es así, eso podría estar anulando la configuración de configuración. –

+0

¿Cómo hospedas el servicio? IIS? –

+0

@Jeff: solo estoy creando una nueva instancia de mi cliente de servicio, luego llamando a OperationContract, pasando en mi clase personalizada como parámetro. Nada sofisticado. @Simon: estoy usando el servidor de desarrollo ASP .NET. Actualmente, es todo local. – DaleyKD

Respuesta

7

En el archivo de configuración de servicio, el atributo "nombre" no se encuentra en el elemento

<behaviors> 
    <serviceBehaviors> 
    <behavior name="StackOverflow"> 

y no debe ser una referencia a este nombre en el elemento de servicio:

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="StackOverflow" name="myService"> 
      <endpoint address="" binding="basicHttpBinding" bindingConfiguration="myBinding" 

En general, es una buena idea para validar, si no siempre editar, sus archivos de configuración WCF utilizando el "Editor de configuración de servicio WCF", que se invoca desde el elemento de menú "Herramientas" de Visual Studio.

Además, no existe un comportamiento del punto final definido para el servicio. No sé si esto importa.

+0

¿Me creerá si le digo que cuando agrego un nombre a mi comportamiento, el WCFTestClient me da el error: "Error: no se pueden obtener metadatos. Metadatos contiene una referencia que no se puede resolver. Tipo de contenido application/soap + xml; charset = utf-8 no fue admitido por el servicio. Los enlaces del cliente y del servicio pueden no coincidir. El servidor remoto devolvió un error: (415) Tipo de medio no compatible.HTTP GET. El documento HTML no contiene información del descubrimiento del servicio web. " Es por eso que no incluí un nombre para mi comportamiento. – DaleyKD

+0

Todavía no estoy seguro de cuál fue la verdadera solución para este problema, pero pude resolver mi problema ORIGINAL, lo que hace que este tema sea irrelevante. FWIW, parece que pude deshacerme del error anterior al asegurarme de que mi servicio usaba la configuración de comportamiento. ¡Gracias! – DaleyKD

0

Tuve el mismo problema con WCF Test y configuré correctamente el archivo de configuración. Si no hay ningún problema con su archivo de configuración, le sugiero que intente probar el servicio con otro programa, por ejemplo: SOAP UI, creo que este error no proviene del servicio, sino de la Prueba WCF.

Cuestiones relacionadas