IDIspatchMessageInspector
Я реализую IDispatchMessageInspector.AfterReciveRequest Затем я настраиваю так:
<configuration>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.SampleService"
behaviorConfiguration="inspectorBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/SampleService" />
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding"
contract="Microsoft.WCF.Documentation.ISampleService"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="inspectorBehavior">
<serviceInspectors />
</behavior>
</serviceBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add
name="serviceInspectors"
type="Microsoft.WCF.Documentation.InspectorInserter, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
</configuration>
но это не работает
Я проверяю в моей сборке и в моей местной ссылке, и я не нашел Microsoft.WCF.Documentation.InspectorInserter
или же HostApplication
я ищу в сети, чтобы скачать HostApplication
длл но я ничего не нашел.
Что мне нужно сделать?
Мне нужно реализовать больше вещей или мне просто нужна эта конфигурация.
1 ответ
Я обнаружил, что гораздо проще присоединить мою реализацию 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
{