Adición de comportamientos de operación con la instalación WCF

Estoy usando WCF Facility por primera vez para hospedar un par de servicios, tanto en una aplicación de consola (para facilitar la depuración) como en IIS (para producción). Los servicios utilizan un net.msmq punto final

Así es como estoy alojando el servicio en la aplicación de la consola (simplificado):

using (var host = new DefaultServiceHostFactory() 
                    .CreateServiceHost(typeof(MyService).AssemblyQualifiedName, 
                                       new Uri[0])) 
    host.Open(); 

Y así es como se registra:

container.Register(Component.For<UserRequestService>()
                            .LifestylePerWcfOperation()) 

Lo que me gustaría hacer es agregar el siguiente comportamiento a todas las operaciones:

[OperationBehavior(TransactionScopeRequired = true,
                   TransactionAutoComplete = true)] 

Esto es lo que intenté:

container.Register(Component.For<IOperationBehavior>() 
                            .UsingFactoryMethod(
                                x => new OperationBehaviorAttribute 
                                { 
                                    TransactionScopeRequired = true, 
                                    TransactionAutoComplete = true 
                                })); 

Pero eso resulta en una excepción:

System.ArgumentException: The value could not be added to the collection, as the collection already contains an item of the same type: 'System.ServiceModel.OperationBehaviorAttribute'. This collection only supports one instance of each type.
Parameter name: item
   at System.Collections.Generic.KeyedByTypeCollection`1.InsertItem(Int32 index, TItem item)
   at Castle.Facilities.WcfIntegration.Internal.WcfUtils.AddBehaviors[T](IKernel kernel, WcfExtensionScope scope, KeyedByTypeCollection`1 behaviors, IWcfBurden burden, Predicate`1 predicate)
   at Castle.Facilities.WcfIntegration.WcfEndpointExtensions.Install(ServiceEndpoint endpoint, Boolean withContract, IKernel kernel, IWcfBurden burden)
   at Castle.Facilities.WcfIntegration.ServiceHostExtensions.Castle.Facilities.WcfIntegration.IWcfExtensionVisitor.VisitEndpointExtension(IWcfEndpointExtension extension)
   at Castle.Facilities.WcfIntegration.ServiceHostExtensions.Install(ICollection`1 extensions, IWcfBurden burden)
   at Castle.Facilities.WcfIntegration.AbstractServiceHostBuilder.ConfigureServiceHost(ServiceHost serviceHost, IWcfServiceModel serviceModel, ComponentModel model)
   at Castle.Facilities.WcfIntegration.AbstractServiceHostBuilder`1.Build(ComponentModel model, Uri[] baseAddresses)
   at Castle.Facilities.WcfIntegration.WindsorServiceHostFactory`1.CreateServiceHost(String constructorString, Uri[] baseAddresses)
   at Program.Main()

¿Alguna idea?

preguntado el 03 de mayo de 12 a las 18:05

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.