Ведение журнала запросов / ответов в службе WCF REST
Вопрос
Я ищу способ регистрировать как запросы, так и ответы в службе WCF REST.Стартовый набор WCF REST поставляется с классом RequestInterceptor, который может использоваться для перехвата запросов, но, похоже, эквивалента для ответов не существует.В идеале я хотел бы иметь возможность перехватывать ответ непосредственно перед его отправкой по проводам, напримеркогда возвращается базовый сервисный метод.Есть какие-нибудь предложения?
Решение
Обратите внимание, что если вы хотите перехватить необработанное сообщение, а не параметры, вы можете внедрить свою реализацию IDispatchMessageInspector Идентификатор запроса сообщений вместо точки расширения IParameterInspector, которую предлагает Дэни.
Другие советы
В WCF есть такая технология:вы создаете инструментальный атрибут Operationattribute, который является производным от атрибута IOperationBehavior.
Внутри вас реализуется:
public void ApplyDispatchBehavior(
OperationDescription operationDescription,
DispatchOperation dispatchOperation
)
{
dispatchOperation.ParameterInspectors.Add(
new ServerPI()
);
}
и класс ServerPI() - это то, что делает магию:вы делаете все, что вам нужно, в методах beforecall и aftercall:
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();
}
}