Unfortunately no. I tried this approach already. As I understand it, the only thing allowed in the message body is a Stream, and the method must return void. I need to upload an image, insert a record into the database, and receive a PK back. This is used in the next request.
If I switched to net 4.0 would I be able to easily get this done? On Oct 14, 5:27 am, Craig Neuwirt <[email protected]> wrote: > 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 > posthttp://weblogs.asp.net/cibrax/archive/2007/08/29/sending-attachments-... > > 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 > > 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.
