Передайте тело ответа из 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"]
Вы также можете пройти более сложный, если вам нужно. Надеюсь, это поможет.