Deseo agregar una extensión de comportamiento para que mis clases de servicio se instanciarán con Ninject. Creé una clase que hereda de BehaviorExtensionElement y la registré en mi App.config. No puedo ver nada obvio que me falta, sin embargo, en el inicio de este se lanza:Al agregar una extensión de comportamiento de wcf personalizada se produce una excepción ConfigurationErrorsException
System.Configuration.ConfigurationErrorsException: An error occurred creating the configuration section handler for system.serviceModel/behaviors: Extension element TestExtension cannot be added to this element. Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions.
Parameter name: element (...\MyAssembly.dll.config line 42) --->
System.ArgumentException: Extension element TestExtension cannot be added to this element.
Verify that the extension is registered in the extension collection at system.serviceModel/extensions/behaviorExtensions.
Parameter name: element
Aquí es mi App.config:
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="TestExtension" type="Mynamespace.DependencyInjectionServiceBehavior,MyAssembly,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<TestExtension/>
</behavior>
</serviceBehaviors>
</behaviors>
Aquí es mi clase de comportamiento:
public class DependencyInjectionServiceBehavior : BehaviorExtensionElement, IServiceBehavior
{
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcherBase cdb in serviceHostBase.ChannelDispatchers)
{
ChannelDispatcher cd = cdb as ChannelDispatcher;
if (cd != null)
{
foreach (EndpointDispatcher ed in cd.Endpoints)
{
ed.DispatchRuntime.InstanceProvider =
new DependencyInjectionInstanceProvider(serviceDescription.ServiceType);
}
}
}
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase,
Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public override Type BehaviorType
{
get { return this.GetType(); }
}
protected override object CreateBehavior()
{
return new DependencyInjectionServiceBehavior();
}
}
alguna solución ?? – Kiquenet
Exactamente lo que necesitaba saber para solucionar mi problema: gracias – stuartd
El uso del Editor de configuración de servicios WCF para agregar la extensión de comportamiento le permitirá buscar la DLL y la clase dentro y agregará la información adecuada a su archivo de configuración como bien. ¡Otra alternativa que podría ser un poco más fácil para algunas personas! –