如何记录在 IIS 6.0 上运行的 WebService 的通信?

Mar*_*tin 2 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)

Mik*_*all 5

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

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

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
Run Code Online (Sandbox Code Playgroud)

和...

...
</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>
Run Code Online (Sandbox Code Playgroud)

...

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

protected void Application_Start(Object sender, EventArgs e)
{
            log4net.Config.DOMConfigurator.Configure();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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