asp.net - 如何记录在 IIS 6.0 上运行的 WebService 的通信?

标签 asp.net iis logging web-services

我在 IIS 6.0 上运行 ASP.NET WebService,它在 %systemroot%\System32\LogFiles\W3SVC1 的日志中显示大量 HTTP 500(可能只是 WebService 的异常)在客户网站上。

是否可以在不使用 IIS 或 IIS 插件修改 WebService 的情况下记录这些 HTTP 响应和请求的内容?

我想到了使用 WiresharkFiddler嗅探 HTTP 流量,但我更愿意只打开 IIS 中的一个选项,让他记录通信(这应该不难,因为它无论如何都会记录请求的 URL)

最佳答案

我们在使用 log4net 之前已经这样做了.以下是高级步骤:

在您的 web.config 中创建一个 log4net 部分

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

和...

...
</system.web>
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <param name="File" value="c:\mysvc.log" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="10" />
      <param name="MaximumFileSize" value="1000000" />
      <param name="RollingStyle" value="Size" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <!-- Setup the root category, add the appenders and set the default priority -->
    <root>
      <level value="DEBUG" />
      <!--<priority value="DEBUG" />-->
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>

...

在您的 Global.asax.cs 中调用 log4net Configure()

protected void Application_Start(Object sender, EventArgs e)
{
            log4net.Config.DOMConfigurator.Configure();
}

在您的网络服务 .cs 文件的顶部,声明一个 log4net ILog 实例

public class MyService : System.Web.Services.WebService {
{
   private static readonly ILog log = LogManager.GetLogger(typeof(MyService));

在您的网络服务方法中,捕获异常并记录它们

[WebMethod]
public void DoSomething()
{
  try
  {
     // business logic
  }
  catch(Exception ex)
  {
     log.Error("Something bad happened", ex);
     throw;
  }
}

完成这些步骤后,在上面的示例中,任何异常都将出现在 c:\mysvc.log

关于asp.net - 如何记录在 IIS 6.0 上运行的 WebService 的通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2628305/

相关文章:

java - 生成自定义记录器

java - slf4j 和 log4j 日志消息在控制台中可见,但未附加到日志文件中

c++ - 在 boost::log 中使用格式语法

asp.net - cookie 可以在机器之间复制来冒充用户吗?

c# - 带有 C# 的 ASP.net 在回发时保留列表

iis - 在 Azure 中将应用程序池的标识设置为 LocalSystem

c# - 在 IIS 上运行发布版本时出现 Blazor WebAssembly InvalidCastException

.net - .NET 业务层中的结构与类

c# - Google Calendar API,只需知道某人的电子邮件地址即可将事件添加到某人的日历中

Python websockets 模块和 IIS 作为反向代理