Регистрация запросов / ответов в службе WCF REST - PullRequest
1 голос
/ 31 октября 2009

Я ищу способ регистрации запросов и ответов в REST-службе WCF. Начальный комплект WCF REST поставляется с классом RequestInterceptor, который можно использовать для перехвата запросов, но, похоже, для ответов не существует эквивалента. В идеале я хотел бы иметь возможность перехватить ответ непосредственно перед его отправкой по сети, например, когда основной сервисный метод возвращается. Есть предложения?

Ответы [ 2 ]

2 голосов
/ 31 октября 2009

Обратите внимание, что если вы хотите перехватить необработанное сообщение, а не параметры, вы можете внедрить реализацию IDispatchMessageInspector вместо точки расширения IParameterInspector, которую предлагает Дани.

0 голосов
/ 31 октября 2009

В WCF есть техника: вы создаете InstrumentedOperationAttribute, который является производным от атрибута IOperationBehavior.

Внутри вы реализуете:

public void ApplyDispatchBehavior(

   OperationDescription operationDescription,

   DispatchOperation dispatchOperation

   )
{

  dispatchOperation.ParameterInspectors.Add(

     new ServerPI()

     );

}

и класс ServerPI () - это то, что делает магию: вы делаете все, что вам нужно в методах до и после вызова:

  class ServerPI : IParameterInspector
  {

    public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
    {
      Guid result = (Guid)correlationState;
      // ...
    }

    public object BeforeCall(string operationName, object[] inputs)
    {
      string parameter1 = inputs[0] as string;
      return Guid.NewGuid();
    }

  }
...