C# 跟踪在本地主机上创建的输出文件,但不跟踪在服务器上部署服务时创建的输出文件

C# 跟踪在本地主机上创建的输出文件,但不跟踪在服务器上部署服务时创建的输出文件,c#,wcf,C#,Wcf,我正在使用以下web.config为我的WCF服务启用跟踪。虽然文件通常在本地主机上创建,但在部署我的服务的服务器上没有创建任何文件 <system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="tr

我正在使用以下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帐户对指定文件夹的写入权限。我做错了什么?

您在web服务器上安装了跟踪功能了吗?

这听起来很像权限问题

您说您已向ASP.NET帐户授予写入权限,但您的服务可能不在此帐户下运行

例如,在IIS 7 Windows 2008中,默认帐户名为
ApplicationPoolIdentity
。在IIS 6 Windows 2003下,此默认帐户称为
NetworkService
。但在这两种情况下,当然可以在IIS控制面板中进行修改

因此,当你说ASP.NET帐户以及你授予哪个帐户权限时,你的意思并不十分清楚。除授予写入权限外,您可能还需要授予修改权限,以便进程可以在文件不存在时创建该文件。否则,您需要先手动创建它。如果您不确定在哪个帐户下运行您的web服务,您可以使用该工具查找


此外,IIRC日志可能不会立即刷新到日志文件中。它在内存中保存了一段时间,并每隔一段时间刷新。重新启动应用程序池可确保内容立即刷新到文件中。

上述答案非常好,值得研究。我还要补充一点,您应该确保在配置文件中启用了消息日志记录。类似这样的内容(只是一个示例):



我不确定这是否能解决你的问题,但它在过去曾帮助我解决过类似的问题。希望能有所帮助。

您也可以暂时授予“所有人”对文件夹的写入权限,从而排除权限。是的,这是一个很好的观点。这应该可以完成任务。另外,别忘了我答案中的刷新部分,其中的内容可能不会立即写入。
<system.serviceModel>
    <diagnostics>
        <messageLogging
            logEntireMessage="true"
            logMalformedMessages="false"
            logMessagesAtServiceLevel="true"
            logMessagesAtTransportLevel="false"
            maxMessagesToLog="3000"
            maxSizeOfMessageToLog="2000"/>
    </diagnostics>
</system.serviceModel>