The default maximum sizes used by WCF are indeed extremely tight.
Fortunately, anything you can specify in your config file you can also specify programmatically. It is something we do in all our products as we don't want to mess around with massive WCF sections in SharePoint's web.config.
I have included some sample code below, in this case from a WCF Client, but the same applies to the WCF Service
/// Configure the Bindings, endpoints and open the service using the specified address.
/// <returns>An instance of the Web Service.</returns>
public static DocumentConverterServiceClient OpenService(string address)
DocumentConverterServiceClient client = null;
BasicHttpBinding binding = new BasicHttpBinding();
// ** Use standard Windows Security.
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
// ** Increase the Timeout to deal with (very) long running requests.
binding.SendTimeout = TimeSpan.FromMinutes(30);
binding.ReceiveTimeout = TimeSpan.FromMinutes(30);
// ** Set the maximum document size to 40MB
binding.MaxReceivedMessageSize = 50*1024*1024;
binding.ReaderQuotas.MaxArrayLength = 50 * 1024 * 1024;
binding.ReaderQuotas.MaxStringContentLength = 50 * 1024 * 1024;
// ** Specify an identity (any identity) in order to get it past .net3.5 sp1
EndpointIdentity epi = EndpointIdentity.CreateUpnIdentity("unknown");
EndpointAddress epa = new EndpointAddress(new Uri(address), epi);
client = new DocumentConverterServiceClient(binding, epa);