2016-03-21 3 views
0

У меня есть сервис с использованием WCF-механизма Windsor, но я не могу получить UseSynchronisationContext и ConcurrencyMode, которые обычно делаются с использованием ServiceBehaviorAttribute. Я видел два варианта, которые, по-видимому, должны работать (но старались как без толка):Windsor WcfFacility: Setting ServiceBehavior properties

  1. , регистрирующих ServiceBehaviorAttribute как компонент для IServiceBehavior
  2. модифицирования Description коллекцию Behaviors в функции обратного вызова OnCreated конфигурации в регистрации WCF ,

Третий метод, который я пытался использует AddExtensions, но это приводит к исключению, поскольку уже есть ServiceBehaviorAttribute (по умолчанию?) В списке поведений. Это также относится к методу 2, но в этом случае я могу удалить его и добавить новый или изменить существующую запись.

Это действительно разочаровывает, что на нем нет никакой документации, кроме строки с надписью «Удалить ServiceBehaviorAttribute» из ваших служб, по-видимому, потому что это может конфликтовать с WcfFacility.

Может кто-нибудь указать мне, как правильно это сделать? Любой намек ценится!

ответ

0

К сожалению, я не прошел надлежащую проверку. Изменение свойств ServiceBehaviorAttribute в списке Behaviors свойства Description в действии OnCreated действительно работает по назначению.

Пример регистрации:

container.Register(Component.For<IWCFWarehouseServiceAsyncCallback>() 
    .ImplementedBy<WarehouseService>() 
    .AsWcfService(new DefaultServiceModel() 
     .AddBaseAddresses(baseAddress) 
     .OnCreated(host => 
     { 
      var sb = host.Description.Behaviors.Find<ServiceBehaviorAttribute>(); 
      sb.UseSynchronizationContext = false; 
      sb.ConcurrencyMode = ConcurrencyMode.Reentrant; 
     }) 
     .AddEndpoints(WcfEndpoint.BoundTo(binding).At("WarehouseService"))));