Good question. WCF makes it a real pain to manipulate the quota stuff.
I am not sure the best way to handle this, but this might work for you
create
public class AdjustQuotasBehavior : AbstractServiceHostAware
{
protected override Opening(ServiceHost serviceHost)
{
foreach (var endpoint in serviceHost.Description.Endpoints)
{
var binding = endpoint.Binding as BasicHttpBinding;
if (binding != null)
{
binding.ReaderQuotas.MaxArrayLength = FIVE_MEGABYTES;
// Do same for other
}
}
}
}
And register this component in container
container.Register(Component.For< AdjustQuotasBehavior>())
I have never tried this though. I could add service binding inference from
base address like I did with clients, but this would only work for 3.5
since I used the default endpoint support out of the box for WCF 4.0
Let me know how this goes and we'll find another way if this doesn't work
good luck,
craig
On Oct 12, 2010, at 9:38 AM, João Bragança wrote:
> What is the simplest way to override this? I really don't want to
> configure all the endpoints by hand if I can avoid it.
>
> On Oct 12, 6:34 am, Craig Neuwirt <[email protected]> wrote:
>> If I recall, the DefaultBinding stuff comes into play when you specify
>> endpoints without bindings. I think in your case, the default endpoint
>> logic is getting applied which is based on the base address and not the
>> default binding.
>>
>> On Oct 11, 2010, at 7:23 PM, João Bragança wrote:
>>
>>
>>
>>> I have a WCF service where I need to upload images. I am configuring
>>> it like so:
>>
>>> public class WcfServicesInstaller : IWindsorInstaller
>>> {
>>> private const int FIVE_MEGABYTES = 1024*1024*5;
>>
>>> private const string SERVICE_SUFFIX = "Service";
>>
>>> #region IWindsorInstaller Members
>>
>>> public void Install(IWindsorContainer container,
>>> IConfigurationStore
>>> store)
>>> {
>>> container.AddFacility<WcfFacility>(f => f.DefaultBinding
>>> = new
>>> BasicHttpBinding
>>>
>>> {
>>
>>> MaxReceivedMessageSize = FIVE_MEGABYTES,
>>>
>>> // 5
>>> megs,
>>
>>> MaxBufferPoolSize = FIVE_MEGABYTES,
>>
>>> MaxBufferSize = FIVE_MEGABYTES,
>>
>>> ReaderQuotas = new XmlDictionaryReaderQuotas
>>
>>> {
>>
>>> MaxArrayLength = FIVE_MEGABYTES,
>>
>>> MaxDepth = FIVE_MEGABYTES,
>>
>>> MaxStringContentLength = FIVE_MEGABYTES,
>>
>>> MaxNameTableCharCount = FIVE_MEGABYTES,
>>
>>> MaxBytesPerRead = FIVE_MEGABYTES
>>
>>> }
>>>
>>> })
>>>
>>> .Register(AllTypes.FromAssemblyContaining<IAuthenticationService>()
>>> .Where(type =>
>>> type.Name.EndsWith(SERVICE_SUFFIX))
>>> .WithService.FirstInterface()
>>> .Configure(r =>
>>> NameService(r).LifeStyle.Transient),
>>> Component.For<IServiceBehavior>()
>>>
>>> .ImplementedBy<ServiceDebugBehavior>()
>>> .DependsOn(new
>>> {
>>>
>>> IncludeExceptionDetailInFaults = true,
>>>
>>> HttpHelpPageEnabled = true,
>>> }),
>>> Component.For<IServiceBehavior>()
>>>
>>> .ImplementedBy<ServiceMetadataBehavior>()
>>> .DependsOn(new
>>> {
>>>
>>> HttpGetEnabled = true
>>> }),
>>
>>> Component.For<IServiceBehavior>().ImplementedBy<UnitOfWorkBehavior>());
>>> }
>>
>>> #endregion
>>
>>> private static ComponentRegistration<object>
>>> NameService(ComponentRegistration<object> registration)
>>> {
>>> var implementation = registration.Implementation;
>>> registration.Named(implementation.Name.Substring(0,
>>> implementation.Name.Length - SERVICE_SUFFIX.Length)
>>> .ToLowerInvariant() + ".svc");
>>> return registration;
>>> }
>>> }
>>
>>> But when I upload one I get everyone's second favorite wcf exception:
>>
>>> The formatter threw an exception while trying to deserialize the
>>> message: There was an error while trying to deserialize parameter
>>> http://tempuri.org/:Data. The InnerException message was 'There was an
>>> error deserializing the object of type System.Byte[]. The maximum
>>> array length quota (16384) has been exceeded while reading XML data.
>>> This quota may be increased by changing the MaxArrayLength property on
>>> the XmlDictionaryReaderQuotas object used when creating the XML
>>> reader. Line 1, position 26406.
>>
>>> Is the wcf facility ignoring my DefaultBinding when using the "look no
>>> config" method? Or am I doing something else wrong?
>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Castle Project Users" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group
>>> athttp://groups.google.com/group/castle-project-users?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Castle Project Users" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/castle-project-users?hl=en.
>
--
You received this message because you are subscribed to the Google Groups
"Castle Project Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en.