We may be going about this the wrong way.  I think a better approach for 
uploading images is to use the WCF streaming model.  This should eliminate the 
size issue, but you will need to configure a binding to specify it.

Here is a good post
http://weblogs.asp.net/cibrax/archive/2007/08/29/sending-attachments-with-wcf.aspx

Are you able to do this in your app?  

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.

Reply via email to