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

时间:2010-04-13 09:11:02

标签: 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)

2 个答案:

答案 0 :(得分:4)

我们在使用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

答案 1 :(得分:3)

创建HTTPModule并在ASP.NET配置中对其进行配置。您不需要修改现有Web Service的代码(甚至不需要源代码),只需在Web.config中配置HTTPModule。

在HTTPModule中,侦听诸如BeginRequest和EndRequest之类的事件,您应该能够将输入记录到Web服务并从Web服务输出。

如果您需要捕获Web服务中引发的异常,您可以按照herehere所述捕获错误事件。

<强>更新

根据this page,您不能将错误事件方法与Web服务一起使用,因为Web服务错误不会路由到Error事件。 Microsoft建议您使用SOAP Extensions来记录Web服务错误。