IDIspatchMessageInspector - PullRequest
       13

IDIspatchMessageInspector

12 голосов
/ 19 августа 2010

Я реализую 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 Я ищу в сети, чтобы загрузить HostApplication dll, но ничего не нашел.

Что мне делать?

Мне нужно реализовать больше вещей или мне просто нужна эта конфигурация.

1 Ответ

22 голосов
/ 11 марта 2011

Я обнаружил, что гораздо проще присоединить мою реализацию 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
{
...