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
dll
Я ищу в сети, чтобы загрузить dll 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
{