2012-04-20 2 views
0

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

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

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

ответ

1

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

Edit: Фиксированный код ниже

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"] 

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