You can do this by expanding the host factory. With a small modification of the code below, you can pass an additional parameter to WCFCerviceHostFactory to set it from Global.asax. I used the classes below to always set it to Int32.MaxValue
// in Global.asax
routes.Add(new ServiceRoute(routePrefix, new WCFServiceHostFactory(), serviceType));
//WCFServiceHostFactory.cs
namespace MyServices.MyService { public class WCFServiceHostFactory:WebServiceHostFactory { protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) { WCFServiceHost host = new WCFServiceHost(serviceType, baseAddresses); return host; } } }
//WCFServiceHost.cs
namespace MyServices.MyService { public class WCFServiceHost:WebServiceHost { public WCFServiceHost(): base () { } public WCFServiceHost (object singletonInstance, params Uri [] baseAddresses) : base (singletonInstance, baseAddresses) { } public WCFServiceHost(Type serviceType, params Uri[] baseAddresses) : base (serviceType, baseAddresses) { } protected override void OnOpening () { base.OnOpening (); foreach (Uri baseAddress in BaseAddresses) { bool found = false; foreach (ServiceEndpoint se in Description.Endpoints) if (se.Address.Uri == baseAddress) { found = true; ((WebHttpBinding)se.Binding).ReaderQuotas.MaxStringContentLength = Int32.MaxValue;
Vadim Alekseevski
source share