Ok, I'll make one up On Oct 13, 2010, at 1:26 PM, João Bragança wrote:
> No, not really. The actual client is a Flex/AIR application. > > On Oct 13, 10:22 am, Craig Neuwirt <[email protected]> wrote: >> Do you happen to have a client the performs the upload with the image >> culprit? If not, I can write one. >> >> On Oct 12, 2010, at 1:28 PM, João Bragança wrote: >> >> >> >> >> >> >> >>> Here's a repo of the bug. Thanks again for taking a look! >> >>> ---------- Forwarded message ---------- >>> From: Craig Neuwirt <[email protected]> >>> Date: Oct 12, 11:00 am >>> Subject: Wcf Facility, DefaultBinding and Quota Exceeded >>> To: Castle Project Users >> >>> Any chance you can zip me a subset of your app so I can run it locally >>> and try and find a solution for you? Just enough to demonstrate the i >> >>> On Oct 12, 2010, at 11:24 AM, João Bragança wrote: >> >>>> Craig, >> >>>> In OnOpening the serviceHost doesn't have any bindings. I tried it in >>>> OnOpened but I got the same error. >> >>>> On Oct 12, 8:06 am, Craig Neuwirt <[email protected]> wrote: >>>>> 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 >>>>>> 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 >>>> 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 >>> athttp://groups.google.com/group/castle-project-users?hl=en. >>> <IHateWcfConfiguration.zip> > > -- > 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.
