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

本文关键字:创建 跟踪 文件 输出 部署 服务器 服务 主机 | 更新日期: 2023-09-27 18:37:13

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

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

这听起来很像权限问题。

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

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

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

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

您是否在 Web 服务器上安装了跟踪功能?

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

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

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