2016-03-21 18 views
0

Ich hosten einen Dienst mit Windsor WCF Facility, aber ich kann UseSynchronisationContext und ConcurrencyMode nicht festlegen, dass man normalerweise die ServiceBehaviorAttribute verwenden würde. Ich habe zwei Möglichkeiten gesehen, die scheinbar funktionieren sollte (aber versucht, ohne Erfolg beide):Windsor WcfFacility: Einstellung ServiceBehavior Eigenschaften

  1. Registrieren ServiceBehaviorAttribute als Komponente für IServiceBehavior
  2. Ändern der Description Sammlung von Behaviors in der OnCreated Konfiguration Rückruf in der WCF-Registrierung .

Eine dritte Methode, die ich versucht hat, ist AddExtensions verwenden, aber das führt zu einer Ausnahme, weil es bereits ein ServiceBehaviorAttribute (standardmäßig?) In der Liste des Behaviors. Dies ist auch bei Methode 2 der Fall, aber in diesem Fall kann ich sie entfernen und eine neue hinzufügen oder den bestehenden Eintrag ändern.

Es ist wirklich frustrierend, dass es keine Dokumentation zu diesem Thema gibt, mit Ausnahme einer Zeile mit dem Hinweis 'Remove the ServiceBehaviorAttribute' aus Ihren Diensten, offenbar weil es zu Konflikten mit der WcfFacility kommen kann.

Kann mir jemand zeigen, wie man das richtig macht? Jeder Hinweis wird geschätzt!

Antwort

0

Leider habe ich nicht richtig getestet. Das Ändern der Eigenschaften des ServiceBehaviorAttribute in der Liste der Behaviors der Description-Eigenschaft in der OnCreated Aktion funktioniert tatsächlich wie vorgesehen.

Beispiel Anmeldung:

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")))); 
Verwandte Themen