Я хочу добавить расширение поведения, чтобы мои классы обслуживания были созданы с помощью Ninject. Я создал класс, который наследует от BehaviorExtensionElement и зарегистрировал его в моем App.config. Я ничего не вижу очевидного мне не хватает, но при запуске этого брошено:Добавление пользовательского расширения поведения wcf вызывает 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
Вот мой 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>
Вот мое поведение класс:
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();
}
}
любое решение ??? – Kiquenet
Точно то, что мне нужно было знать, чтобы исправить мою проблему - спасибо – stuartd
Использование редактора конфигурации службы WCF для добавления расширения поведения позволит вам просматривать DLL и класс внутри и будет добавлять соответствующую информацию в ваш файл конфигурации как Что ж. Еще одна альтернатива, которая может быть немного легче для некоторых людей! – 2011-06-29 12:16:41