Hello.
I'm using the WCF Facility for the first time to host a couple
services, both in a console app (for easy debugging) and IIS (for
production). The services use a net.msmq endpoint.
This is how I'm hosting the service in the console app (simplified):
using (var host = new DefaultServiceHostFactory()
.CreateServiceHost(typeof(MyService).AssemblyQualifiedName,
new Uri[0]))
host.Open();
And here's how it's registered:
container.Register(Component.For<UserRequestService>().LifestylePerWcfOperation())
What I'd like to do is to add the following behavior to all
operations:
[OperationBehavior(TransactionScopeRequired = true,
TransactionAutoComplete = true)]
Here's what I tried:
container.Register(Component.For<IOperationBehavior>()
.UsingFactoryMethod(x => new
OperationBehaviorAttribute
{
TransactionScopeRequired = true,
TransactionAutoComplete = true
}));
But that results in an exception:
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()
Any ideas?
Something else I'm interested in is adding basic exception logging to
all operations. I'm already using the Logging facility for other parts
of my project and it works well. Any pointers or samples?
(It's worth noting that, since this uses MSMQ, all the operations are
OneWay, and the messages are moved automatically to a retry queue on
failure by the binding, which is OK. That's why I need a way to know
what went wrong with a particular message)
Thanks!
--
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.