Передайте тело ответа из IDispatchMessageInspector в Application_EndRequest

Я хочу регистрировать параметры запроса и тело ответа, которые передаются через мой сервис WCF REST. Я могу получить полный ответ в IDispatchMessageInspector. И я могу получить доступ к заголовкам запросов и другим элементам, которые я храню в Context.Items во время операций в Application_EndRequest.

Во время отладки я вижу, что операции выполняются через IDispatchMessageInspector, а затем через Application_EndRequest. Моя идея состоит в том, чтобы сохранить ответ где-нибудь в IDispatchMessageInspector, а затем в Application_EndRequest, я получу ответ и зарегистрирую его вместе с другими параметрами запроса.

Итак, мой вопрос: где я должен хранить ответ, чтобы он был доступен в Application_EndRequest?

1 ответ

Решение

Я сейчас пытаюсь сделать что-то подобное. Я регистрирую входящий запрос, сохраняю его в базе данных и затем хотел бы передать идентификатор журнала моей конечной точке для последующего использования. В своем вызове AfterReceiveRequest просто добавьте все, что вам нужно, в атрибут IncomingMessageProperties текущего контекста операции:

Изменить: Исправлен код ниже

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
        request = buffer.CreateMessage();
        int LogRequestID = Logging.LogIncomingRequest(buffer.CreateMessage());

        OperationContext.Current.IncomingMessageProperties.Add("LogRequestID", LogRequestID);

        return null;
    }

Затем я могу прочитать LogRequestID в моей конечной точке с помощью следующего кода:

OperationContext.Current.IncomingMessageProperties["LogRequestID"]

Вы также можете пройти более сложный, если вам нужно. Надеюсь, это поможет.

Другие вопросы по тегам