Я обнаружил, что гораздо проще присоединить мою реализацию IDispatchMessageInspector с помощью реализации IServiceBehavior, которая также расширяет атрибут.Затем в методе ApplyDispatchBehavior присоедините свой инспектор сообщений ко всем конечным точкам во всех каналах.
Эта статья очень помогла мне.
Пример кода:
public class MyServiceBehavior : Attribute, IServiceBehavior
{
public void ApplyDispatchBehavior( ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase )
{
foreach( ChannelDispatcher cDispatcher in serviceHostBase.ChannelDispatchers )
foreach( EndpointDispatcher eDispatcher in cDispatcher.Endpoints )
eDispatcher.DispatchRuntime.MessageInspectors.Add( new RequestAuthChecker() );
}
}
Затем при реализации вашего контракта на обслуживание вы можете просто добавить атрибут в класс.
[ServiceBehavior( InstanceContextMode = InstanceContextMode.PerCall )]
[MyServiceBehavior]
public class ContractImplementation : IServiceContract
{