2012-06-15 81 views
1

我正在使用以下web.config爲我的WCF服務啓用跟蹤。雖然文件通常在本地主機上創建,但在部署服務的服務器上沒有創建文件。跟蹤在本地主機上創建的輸出文件,但不在服務器上部署服務時

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "c:\log\Traces.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 

我已經爲ASP.NET帳戶的指定文件夾授予了寫入權限。我究竟做錯了什麼?

回答

3

聽起來很像許可問題。

您說您已授予ASP.NET帳戶的寫入權限,但您的服務可能無法在此帳戶下運行。

例如在IIS 7 Windows 2008中,默認帳戶名爲ApplicationPoolIdentity。在IIS 6 Windows 2003下,此默認帳戶名爲NetworkService。但是在這兩種情況下,當然可以在IIS控制面板中進行修改。

因此,當您說ASP.NET帳戶以及您已授予哪些帳戶權限時,您的意思並不十分清楚。除了授予寫入權限之外,您可能還需要授予修改權限,以便進程可以在文件不存在的情況下創建該文件。否則,您需要先手動創建它。如果您不確定在哪個帳戶下運行您的Web服務,您可以使用SysInternals Process Explorer工具來查明。

另外IIRC日誌可能不會立即刷新到日誌文件。它在記憶中保存一段時間,並在一定的時間間隔內刷新。重新啓動應用程序池可確保立即將內容刷新到文件。

+1

您也可以嘗試通過授予「每個人」臨時對該文件夾的寫入權限來排除權限 – magritte

+0

Yeap,好點。這應該完成這項工作。另外,不要忘記我的答案中的* flush *部分,可能不會立即寫入內容。 –

+0

謝謝Darin! – Pantelis

0

您是否在Web服務器上安裝了跟蹤功能?

0

以上答案非常好,值得研究。我還補充說,你應該確保你已經在配置文件中啓用了消息記錄。像這樣(只是一個例子)的東西:

<system.serviceModel> 
    <diagnostics> 
     <messageLogging 
      logEntireMessage="true" 
      logMalformedMessages="false" 
      logMessagesAtServiceLevel="true" 
      logMessagesAtTransportLevel="false" 
      maxMessagesToLog="3000" 
      maxSizeOfMessageToLog="2000"/> 
    </diagnostics> 
</system.serviceModel> 

我不知道這是否會解決你的問題,但它幫助我在過去類似的問題。希望能幫助到你。

相關問題