wcfsizemessagewebhttp

Setting Max Message and buffer size for WCF webhttp


I currently have a WCF service with webHttp bindings, im attempting to increase the max size that can be inputted to the service by overriding the default settings in config, i have tried doing something like

  <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>

and setting various other properties pertaining to message size but none seems to be working, can one even change the m essage size of a webHttp binding? Any suggestions? Thanks!


Solution

  • There's a multitude of settings that might have an influence depending on your settings - try this:

    <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>
    

    By defining your "version" of the webHttpBinding and setting all those parameters to higher values, you should be able to get through any message size (almost).

    Mind you: this does open up your system to the potential of being flooded with huge messages and thus be brought down to its knees (classic denial-of-service attacks) - that's the reason these limits are set fairly low - by design and on purpose.

    You can change them to higher values - just be aware what you're doing and what the security risks are, if you do!

    Marc

    PS: In order to make use of these settings, you of course have to reference that binding configuration in your server and client side configs:

    <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>