2013-08-21 6 views
8

Я пытаюсь создать плагин на основе интерфейса ServiceStack IPlugin, который может измерять время, прошедшее по операциям, и публиковать его на информационной панели. Сам код был бы довольно простым, и я попытался сделать это на основе некоторых концепций на Request Logger.Доступ к IRequestContext в плагине на ServiceStack

Этот регистратор использует StopWatch, который добавляется внутри класса ServiceRunner по умолчанию, но он работает только в том случае, когда настроен Request Logger.

У меня уже есть пользовательский ServiceRunner, и здесь инициализируется StopWatch, но использование этого подхода не является оптимальным, поскольку плагин не является самодостаточным.

Моя самая большая проблема сейчас в том, что я, по-видимому, не могу получить доступ к IRequestContext. Есть ли способ, которым плагин может получить доступ к этому контексту или любым другим способом для измерения времени для запуска запросов внутри простого плагина, не зависящего от ServiceRunner?

Спасибо!

+0

вы можете обновить этот вопрос с вашим осущ Iplugin? –

ответ

1

Сохраните время начала запроса в RequestFilter, а затем в ResponseFilter вычислите время с использованием текущего времени минус время начала?

Это можно сделать и в плагине.

Вот некоторые псевдо-код ...

appHost.RequestFilters.Add((req, res, obj) => 
    { 
     if(!req.Items.ContainsKey("begin-time")) 
      req.Items.Add("begin-time", DateTime.Now); 
     else 
      req.Items[ "begin-time" ] = DateTime.Now; 
    } 
); 

appHost.ResponseFilters.Add((req, res, i) => 
    { 
     var beginTime = (DateTime)req.Items[ "begin-time" ]; 

     var elapsed = DateTime.Now - beginTime; 
    } 
); 
Смежные вопросы