Не удалось заставить IDispatchMessageInspector работать

Мне нужно поиграть с заголовком запроса в веб-службе REST, Json, WCF. Я создаю свой IDispatchMessageInspector

public class HeaderInspector : IDispatchMessageInspector
{
    public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
    {
        int ind = request.Headers.FindHeader("xxxxx", "");
        return null;
    }

    public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
    {
    }
}

Затем поведение конечной точки для прикрепления инспектора к конечным точкам:

public class HeaderInspectorBehavior : IEndpointBehavior
{
    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {
        HeaderInspector headerinsp = new HeaderInspector();
        endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new HeaderInspector());
    }

    public void Validate(ServiceEndpoint endpoint)
    {
    }
}

И, наконец, BehaviorExtensionElement:

public class MyExtension : BehaviorExtensionElement
{
    public override Type BehaviorType
    {
        get { return typeof(HeaderInspectorBehavior); }
    }
    protected override object CreateBehavior()
    {
        return new HeaderInspectorBehavior();
    }
}

Эти классы находятся в одном файле/пространстве имен PDM.WebService. Моя конфигурация:

<behaviors>
  <endpointBehaviors>
    <behavior name="RestBehavior">
      <HeaderInspectorBehavior/>
      <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json" faultExceptionEnabled="true" automaticFormatSelectionEnabled="false" />
    </behavior>
  </endpointBehaviors>
</behaviors>
<extensions>
  <behaviorExtensions>
    <add name="HeaderInspectorBehavior" type="PDM.WebService.MyExtension, PDM.WebService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  </behaviorExtensions>
</extensions>

Все компилируется хорошо, при выполнении я могу поймать выполнение метода «public override Type BehaviorType», но после этого никакие другие методы кода не запускаются (я отправил запрос и получил ответ, служба отвечает хорошо). я устанавливаю точку отладки в каждом методе, больше ничего не выполняется! (особенно ApplyDispatchBehavior). Может ли кто-нибудь указать, что мне не хватает?


person PSV    schedule 30.08.2012    source источник


Ответы (1)


См. CreateBehavior() не вызывается для аналогичной проблемы.

Убедитесь, что имя вашего элемента службы соответствует mynamespace.myservicename

Служба будет предоставлять правильный ответ, даже если у вас нет правильного имени службы; но CreateBehavior() будет вызываться только тогда, когда у вас есть правильное имя для элемента службы.

Пример

<service
      name="WcfServiceApp001.Service1"
      behaviorConfiguration="InternalPayrollBehavior">
<endpoint address="" binding="basicHttpBinding"
          behaviorConfiguration="EndpointBehavior"
          contract="WcfServiceApp001.IService1"
          />
</service>
person LCJ    schedule 25.03.2013