2009-07-27 12 views
5

Attualmente ho un servizio WCF con collegamenti WebHttp, sto tentando di aumentare la dimensione massima che può essere immessa nel servizio sovrascrivendo le impostazioni predefinite in config, ho provato a fare qualcosa comeImpostazione del messaggio Max e dimensione del buffer per il web WCF

<system.serviceModel> 
<bindings> 
<webHttpBinding> 
    <binding name="webHttp" > 
    <security mode="Transport"> 
     <transport clientCredentialType = 
      "None" 
      proxyCredentialType="None" 
      realm="string" /> 
    </security> 
    </binding> 

</webHttpBinding> 
</bindings> 
<services> 

    <service name="PrimeStreamInfoServices.Service1" behaviorConfiguration="PrimeStreamInfoServices.Service1Behavior"> 
    <!-- Service Endpoints --> 
    <endpoint address="" binding="webHttpBinding" contract="PrimeStreamInfoServices.IService1"> 
     <!-- 
      Upon deployment, the following identity element should be removed or replaced to reflect the 
      identity under which the deployed service runs. If removed, WCF will infer an appropriate identity 
      automatically. 
     --> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="PrimeStreamInfoServices.Service1Behavior"> 
     <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
     <serviceMetadata httpGetEnabled="true"/> 
     <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<diagnostics> 

e impostando varie altre proprietà relative alla dimensione del messaggio, ma nessuno sembra funzionare, si può anche cambiare la dimensione m essaggio di un webHttp vincolante? Qualche suggerimento? Grazie!

+0

Potrebbe pubblicare la parte pertinente del file di configurazione? –

+0

appena modificato, check it out – Daniel

risposta

12

C'è un gran numero di impostazioni che potrebbero avere un'influenza a seconda delle impostazioni - provare questo:

<bindings> 
    <webHttpBinding> 
    <binding name="LargeWeb" 
      maxBufferPoolSize="1500000" 
      maxReceivedMessageSize="1500000" 
      maxBufferSize="1500000"> 
     <readerQuotas 
      maxArrayLength="656000" 
      maxBytesPerRead="656000" 
      maxDepth="32" 
      maxNameTableCharCount="656000" 
      maxStringContentLength="656000" 
      /> 
    </binding> 
    </webHttpBinding> 
</bindings> 

Definendo la vostra "versione" del webHttpBinding e impostare tutti i parametri ai valori più alti, si dovrebbe essere in grado di superare qualsiasi dimensione del messaggio (quasi).

Attenzione: questo apre il tuo sistema al potenziale di essere invaso da enormi messaggi e quindi essere messo in ginocchio (classici attacchi denial-of-service) - questo è il motivo per cui questi limiti sono piuttosto bassi - per design e di proposito.

È possibile cambiarli in valori più alti, basta essere consapevoli di ciò che si sta facendo e quali sono i rischi per la sicurezza, se lo si fa!

Marc

PS: Al fine di fare uso di queste impostazioni, è naturalmente necessario fare riferimento a quello che lega configurazione nel proprio server e lato client configurazioni:

<client> 
    <endpoint address="http://localhost" 
      binding="webHttpBinding" bindingConfiguration="LargeWeb" 
      contract="IMyService" /> 
</client> 
<services> 
    <service> 
    <endpoint address="http://localhost" 
       binding="webHttpBinding" bindingConfiguration="LargeWeb" 
       contract="IMyService" /> 
    </service> 
</services> 
+0

Questo non funziona, non mi permette di inviare qualcosa di più grande di 64k ancora – Daniel

+0

Puoi mostrare la tua configurazione? Hai fatto riferimento a questa configurazione vincolante? –

+0

Sì, ho capito che questo era il mio problema, ho appena aggiunto l'intera configurazione, anche se quando ho inserito l'attributo bindingCOnfiguration ho ottenuto un'eccezione, per qualche motivo – Daniel

0

Impostazione Max Messaggio e dimensione del buffer per servizi WCF Rest webhttpbinding

<bindings> 
    <webHttpBinding> 
    <binding maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="200" maxStringContentLength="83886089" maxArrayLength="163841" maxBytesPerRead="2147483647" maxNameTableCharCount="16384"/> 
    </binding> 
    </webHttpBinding> 
</bindings> 
Problemi correlati