2013-08-21 40 views
8

我試圖創建一個基於ServiceStack接口的插件,它可以測量操作所用的時間並將其發佈到儀表板。代碼本身會非常簡單,我試圖根據Request Logger上的一些概念來實現。在ServiceStack上的插件上訪問IRequestContext

此記錄使用被默認ServiceRunner類中增加了一個StopWatch,但它只做它的請求記錄器配置時。

我已經有了一個自定義的ServiceRunner,並且StopWatch正在被初始化,但是使用這種方法並不是最佳的,因爲這個插件並不是獨立的。

我現在最大的問題是我顯然無法訪問IRequestContext。有沒有什麼辦法可以讓插件訪問這個上下文或者任何其他方式來測量在簡單的插件中運行請求的時間,而不依賴於ServiceRunner?

謝謝!

+0

您可以更新您的Iplugin IMPL的問題? –

回答

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; 
    } 
); 
相關問題