I have WCF service, and I have a method when I want to pass parameter as big string (over 1mb)
I run this wcf and in WCF Test Client I changed configuration as is shown below:
<?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>
And when I try invoke this method I still have 413 request entity too large.
As Matt Burland suggested, you need to configure the service end as well as the client. See Configuring Services Using Configuration Files for details. The task is not much different from what you have done on the client end of the wire. Here's an excerpt from the aforementioned article.
WCF uses the System.Configuration configuration system of the .NET
Framework. When configuring a service in Visual Studio, use either a
Web.config file or an App.config file to specify the settings. The
choice of the configuration file name is determined by the hosting
environment you choose for the service. If you are using IIS to host
your service, use a Web.config file. If you are using any other
hosting environment, use an App.config file.
I would suggest not setting everything to int.MaxValue
as have a MaxReceivedMessageSize
set to 2GB opens you up to DOS (Denial-Of-Service) attacks and the like. The remarks section of the MaxReceivedMessageSize
property even states:
The size of the messages that can be received on the wire by services
using the WSHttpBindingBase is bounded by the amount of memory
allocated for each message. This bound on message size is intended to
limit exposure to denial of service (DoS) attacks.
You might just be trying to get it to work at this point, but it is far from recommended to leave it this way.
I have also faced the same issue and solved the problem.
Working code-
(413) Request Entity Too Large in WCF
Follow the app.config code. This is working and using this I can able to send large file
<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>