2014-11-03 25 views
5

devo servizio WCF, e ho un metodo quando voglio passare parametro come stringa grande (più di 1MB)(413) Entità richiesta troppo grande

ho eseguito questo WCF e in prova WCF client ho cambiato configurazione come è la seguente:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IMyService" sendTimeout="00:05:00" 
        maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 

E quando provo richiamare questo metodo ho ancora 413 richiesta di entità troppo grande.

+3

lo hai cambiato in * * entrambe le estremità? Il server e il client? –

+1

ho aggiunto al client: ma ho ancora lo stesso errore – Robert

risposta

4

Come suggerito da Matt Burland, è necessario configurare il service end e il client. Vedi Configuring Services Using Configuration Files per i dettagli. Il compito non è molto diverso da quello che hai fatto sul lato client del cavo. Ecco un estratto dal suddetto articolo.

WCF utilizza il sistema di configurazione System.Configuration del framework .NET . Quando si configura un servizio in Visual Studio, utilizzare un file Web.config o un file App.config per specificare le impostazioni. La scelta del nome del file di configurazione è determinata dall'ambiente di hosting scelto per il servizio. Se si utilizza IIS per ospitare il servizio , utilizzare un file Web.config. Se si utilizza un altro ambiente di hosting , utilizzare un file App.config.

vorrei suggerire non impostare tutto per int.MaxValue come avere un insieme MaxReceivedMessageSize a 2GB che si apre fino a DOS (Denial-Of-Service) attacchi e simili. La sezione Osservazioni della proprietà MaxReceivedMessageSize afferma anche:

La dimensione dei messaggi che possono essere ricevuti sul filo dai servizi utilizzando il WSHttpBindingBase è delimitata dalla quantità di memoria allocata per ogni messaggio. Questa dimensione limite del messaggio è intesa a esposizione limite agli attacchi DoS (Denial of Service).

Si potrebbe semplicemente provare a farlo funzionare a questo punto, ma è lontano da raccomandare di lasciarlo in questo modo.

4

Ho anche affrontato lo stesso problema e risolto il problema. Codice di lavoro-

(413) Request Entity Too Large in WCF Seguire il codice app.config. Questo è il lavoro e l'utilizzo di questo posso in grado di inviare file di grandi dimensioni

<bindings> 
    <webHttpBinding> 
     <binding name="myBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" transferMode="Streamed" > 
      <readerQuotas maxDepth="64" maxArrayLength="2147483647" maxStringContentLength="2147483647"/> 
     </binding> 
    </webHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="ForecastREST_API.RESTServiceImplBehavior" name="ForecastREST_API.RestServiceImpl"> 
     <endpoint address="http://localhost:59624/RestServiceImpl.svc" binding="webHttpBinding" contract="ForecastREST_API.IRestServiceImpl" behaviorConfiguration="Web" bindingConfiguration="myBinding"> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="webHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<behaviors> 
    <endpointBehaviors> 
     <behavior name="Web"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
      <webHttp defaultOutgoingResponseFormat="Json" automaticFormatSelectionEnabled="true" /> 
      <dispatcherSynchronization asynchronousSendEnabled="true" /> 
     </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
     <behavior name="ForecastREST_API.RESTServiceImplBehavior"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
+0

link solo risposte sono scoraggiati – Eldho

+0

@Eldho ho aggiunto il codice di lavoro anche. –

+0

Siamo spiacenti, altri 1 hanno votato in ribasso – Eldho