2013-04-19 25 views
5

Ho cercato questo problema e ho riscontrato problemi simili pubblicati da altri utenti, ma tutto ciò che ho provato non funziona, Il problema è che sto usando un servizio WCF ospitato su IIS, e un client che tenta di caricare un'immagine serializzata su una stringa, la dimensione dell'immagine è 9mb aprox, ma ogni altro funziona bene, posso inviare dati senza problemi tranne l'immagine.Errore servizio WCF 400 richiesta errata

mi hanno permesso TraceLog e il messaggio di errore dice che il MaxReceivedMessageSize superano

Ecco il mio config sul servizio:

<system.diagnostics> 
<sources> 
    <source name="System.ServiceModel" 
     switchValue="Information, ActivityTracing" 
     propagateActivity="true" > 
     <listeners> 
      <add name="xml"/> 
     </listeners> 
    </source> 
    <source name="System.ServiceModel.MessageLogging"> 
     <listeners> 
      <add name="xml"/> 
     </listeners> 
    </source> 
    <source name="myUserTraceSource" 
     switchValue="Information, ActivityTracing, All"> 
     <listeners> 
      <add name="xml"/> 
     </listeners> 
    </source> 
</sources> 
<trace autoflush="true" /> 
<sharedListeners> 
    <add name="xml" 
     type="System.Diagnostics.XmlWriterTraceListener" 
     initializeData="ErrorSvcLog.svclog" /> 
</sharedListeners> 
</system.diagnostics> 

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IServicioSalud" closeTimeout="10:01:00" 
       maxBufferSize="2147483647" maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647" openTimeout="10:01:00" 
       receiveTimeout="10:10:00" sendTimeout="10:01:00" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"> 
       <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
        maxNameTableCharCount="2147483647" /> 
      </binding> 
     </basicHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="ServiceBehavior" name="ServicioSalud"> 
     <endpoint address="" binding="basicHttpBinding" contract="IServicioSalud" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="ServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <dataContractSerializer maxItemsInObjectGraph="200000" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
<diagnostics> 
    <messageLogging 
     logEntireMessage="true" 
     logMalformedMessages="false" 
     logMessagesAtServiceLevel="true" 
     logMessagesAtTransportLevel="false" 
     maxMessagesToLog="3000" 
     maxSizeOfMessageToLog="2000"/> 
</diagnostics> 
</system.serviceModel> 
</configuration> 

E la configurazione client

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IServicioSalud" closeTimeout="10:01:00" 
       openTimeout="10:01:00" receiveTimeout="10:10:00" sendTimeout="10:01: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="4096" maxNameTableCharCount="2147483647" /> 
       <security mode="None"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://xxx.xxx.x.xxx:xxxx/wcfservicesalud/Service.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IServicioSalud" 
      contract="IServicioSalud" name="BasicHttpBinding_IServicioSalud" /> 
    </client> 
</system.serviceModel> 
+0

È necessario impostare l'endpoint del servizio sulla configurazione di collegamento definita (BasicHttpBinding_IServicioSalud) tramite l'attributo 'bindingConfiguration'. – Tim

risposta

4

nel file di configurazione non hai assegnato la configurazione vincolante che hai creato, quindi vengono utilizzati i valori predefiniti per BasicHttpBinding. È necessario assegnare in modo esplicito il legame si è definito (BasicHttpBinding_IServicioSalud) al punto finale, in questo modo:

<endpoint address="" bindingConfiguration="BasicHttpBinding_IServicioSalud" binding="basicHttpBinding" contract="IServicioSalud" /> 

fare questo per il vostro servizio di configurazione, come deve essere impostato per accettare i dati più grandi del servizio.

+0

Grazie! Mi stavo rompendo la testa cercando di risolvere questo problema. – MaxJRB

+0

@MaxJRB - Prego. Sono contento di poterti aiutare. – Tim

0

Questa è la mia versione. Assicurati di aver specificato bindingConfiguration nel servizio desiderato. Nel mio caso, devo specificare il nome basicHttpBinding.

<bindings> 
    <basicHttpBinding> 
    <binding name="basicHttpBinding" maxBufferSize="64000000" maxReceivedMessageSize="64000000" maxBufferPoolSize="64000000"> 
     <readerQuotas maxDepth="64000000" maxStringContentLength="64000000" maxArrayLength="64000000" maxBytesPerRead="64000000" /> 
     <security mode="None"/> 
    </binding> 
    </basicHttpBinding> 
</bindings> 


<services> 
     <service behaviorConfiguration="WS.Service1Behavior" name="WS.EasyStockWS"> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding" contract="WS.IEasyStockWS"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
</services> 
0

Per me, la causa era il fatto che nella mia richiesta non avevo impostare il tipo di contenuto.

Problemi correlati