9

为了解决通过 smtp-server 发送电子邮件的问题,其中没有发送电子邮件,建议我使用 System.Diagnosis.TextWriterTraceListener 启用日志记录,以跟踪与 smtp-server 的通信以跟踪任何错误。我在节点下的 web.config 中添加了以下内容:

<system.diagnostics>
      <trace autoflush="true" />
      <sources>
        <source name="System.Net" >
          <listeners>
            <add name="MyTraceFile"/>
          </listeners>
        </source>

        <source name="System.Net.Sockets">
          <listeners>
            <add name="MyTraceFile"/>
          </listeners>
        </source>
      </sources>

      <sharedListeners>
        <add
          name="MyTraceFile"
          type="System.Diagnostics.TextWriterTraceListener"
          initializeData="System.Net.trace.log"                />
      </sharedListeners>

      <switches>
        <add name="System.Net" value="Verbose" />
        <add name="System.Net.Sockets" value="Verbose" />
      </switches>
    </system.diagnostics>

我在我的开发机器上试了一下,效果很好!我可以轻松读出与 smtp 服务器的完整通信。但是,在生产环境(在 Windows 2003 Server 的 IIS 6 上运行),它根本不起作用。没有日志被写入文件系统。我的第一个想法是,也许 ASP.NET 工作进程帐户(网络服务)没有足够的权限来写入指定位置的文件系统。我解决了这个问题,但仍然没有日志。其次,我认为也许该文件夹被设置为“只读”并修复了它。但我仍然没有写日志。

有谁知道问题可能是什么?或者关于如何解决这个问题的一些建议?提前谢谢!

4

5 回答 5

3

首先,我会在不向文件系统写入任何内容的情况下检查跟踪是否真的有效。也就是说,我只使用常规的 Windows 跟踪。为了查看跟踪输出,我会使用Windows Sysinternals 的 DebugView。当然,也许你应该改变你的配置文件,我对语法不是很熟悉。

现在,如果这两个环境(开发和生产)一切正常,以便您可以在查看器中查看跟踪消息,那么问题将更多地集中在文件系统和日志保存上。

你认为你的日志文件保存在哪里?当涉及到生产环境时,它可能是一个不同的位置。我认为在 Windows Server 2003 上,您应该在 WinDir 下的某处查找文件,而不是在 Web 应用程序的文件夹中。

在调试此类问题时,我会将 IIS 帐户升级为本地/域管理员,以查看问题是否已解决。如果已解决,则此处存在权限问题。

祝你好运!

于 2010-02-06T21:14:17.807 回答
2

开发和生产中的构建是否相同?TRACE 条件编译常量通常没有在发布模式中定义。然后不会显示任何跟踪。

于 2010-02-01T09:00:19.897 回答
2

我将首先在 initializeData 属性中放置一个完全限定的路径:

<add 
      name="MyTraceFile" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="c:\SomePath\System.Net.trace.log"                
 /> 

如有必要,通过添加在同一目录中创建文件的测试页面来验证您的应用程序对该路径具有写入权限。

当您在当前配置中使用相对路径时,我相信在 IIS 下运行时它将相对于应用程序的根目录。但是当在开发机器上在 Cassini 下运行时,情况并非如此——IIRC 它将与 %WINDIR%\System32 相关,但我不会依赖这个。

于 2010-02-07T18:49:04.460 回答
1

您是否尝试过使用Process Monitor查看 System.Net.trace.log 文件是否正在写入,或者创建它时是否出错?是否有可能它只是被写入一个你不想要的奇怪地方(我相信默认应该是 ASP.NET 工作进程的当前工作目录)。

于 2010-02-05T05:03:55.390 回答
1

我的问题是 TRACE 常量没有在依赖项目中定义,所以即使它是在主项目中设置的,它仍然不会记录。一旦我将 TRACE 常量添加到依赖项目中,它就会按预期工作。

于 2015-06-04T21:58:53.537 回答