我第一次使用 WCF 工具在控制台应用程序(便于调试)和 IIS(用于生产)中托管几个服务。这些服务使用net.msmq端点。
这就是我在控制台应用程序中托管服务的方式(简化):
using (var host = new DefaultServiceHostFactory()
.CreateServiceHost(typeof(MyService).AssemblyQualifiedName,
new Uri[0]))
host.Open();
这是它的注册方式:
container.Register(Component.For<UserRequestService>()
.LifestylePerWcfOperation())
我想做的是将以下行为添加到所有操作中:
[OperationBehavior(TransactionScopeRequired = true,
TransactionAutoComplete = true)]
这是我尝试过的:
container.Register(Component.For<IOperationBehavior>()
.UsingFactoryMethod(
x => new OperationBehaviorAttribute
{
TransactionScopeRequired = true,
TransactionAutoComplete = true
}));
但这会导致异常:
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()
有任何想法吗?