2011-12-05 25 views
4

我有一個當前正在生產的WCF服務。代碼性能不是我們希望它們成爲的地方,我們無法在我們的Staging環境中重現。跟蹤對WCF服務所做的所有呼叫(+他們的堆棧)

我想知道是否有可能記錄對服務和服務所做的每個方法調用。本質上,我想要一個所有調用和時間戳的順序列表(我們的代碼不是多線程的)。

有沒有辦法實現這一點,而無需工具的二進制文件。在web.config中的system.diagnostic節點下是否有一定級別的跟蹤,我們可以更改?

+0

這聽起來像你需要分析你的服務。在這種情況下,我看不到堆棧跟蹤如何幫助你。 –

+0

是否有像* jstack *或* pstack *或* lsstack *這樣的工具?一組詳盡的函數調用跟蹤將會讓您猜測大部分時間負責什麼。隨機抽取的中等大小的堆棧軌跡會給你一個很好的想法,因爲時間所佔的時間越多,越多的樣本就會捕獲它。在您清楚瞭解需要花費多少時間之前,您需要的堆棧樣本數量可能會很驚人。 –

回答

6

您是否在配置文件中配置了跟蹤? This是關於這個問題的好文章。

這裏是你可以使用和修改您的需求一個例子:

<system.diagnostics> 
    <trace autoflush="true" /> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
      <listeners> 
       <add name="ServiceModel" 
        type="System.Diagnostics.XmlWriterTraceListener" 
        initializeData="C:\ServiceModel.svclog" /> 
      </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging"> 
      <listeners> 
       <add name="MessageLogging" 
        type="System.Diagnostics.XmlWriterTraceListener" 
        initializeData="C:\MessageLogging.svclog" /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

<system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="True" 
         logMalformedMessages="False" 
         logMessagesAtServiceLevel="True" 
         logMessagesAtTransportLevel="False" 
         maxMessagesToLog="10000" 
         maxSizeOfMessageToLog="10000" /> 
    </diagnostics> 
</system.serviceModel> 

使用Service Trace Viewer Tool(SvcTraceViewer.exe)來查看生成的日誌。