2010-08-19 3 views
12

Я Реализовать IDispatchMessageInspector.AfterReciveRequest Затем я настраиваю так:IDIspatchMessageInspector

<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, но я ничего не нашел.

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

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

+0

Ваша конфигурация не завершена. Опубликовать полную конфигурацию, код инспектора и код поведения. Также удалите эти две пустые записи. –

ответ

22

Мне было проще прикрепить мою реализацию IDispatchMessageInspector, используя реализацию IServiceBehavior, которая также расширяет атрибут. Затем в методе ApplyDispatchBehavior прикрепите свой инспектор сообщений ко всем всем конечным точкам во всех каналах.

Этот article мне очень помог.

Пример кода:

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 
{ 
+26

+1 WCF будет совершенно непригодным для использования без StackOverflow :) – Andomar

+0

Yup, очень жаль, насколько плохо какая-то документация. – MonkeyWrench

+1

Я думаю, что есть хорошее деловое дело для wcf.stackexchange.com – arcain

Смежные вопросы