代码之家  ›  专栏  ›  技术社区  ›  Martin

如何记录在iis 6.0上运行的webservice的通信?

  •  2
  • Martin  · 技术社区  · 15 年前

    我在iis 6.0上运行一个asp.net webservice,它在 %systemroot%\System32\LogFiles\W3SVC1 在客户网站上。

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

    我想用 Wireshark Fiddler 要嗅探http流量,但我更希望在i is中打开一个选项,让他记录通信(这应该不难,因为它无论如何都在记录请求的url)

    2 回复  |  直到 14 年前
        1
  •  3
  •   Martin    14 年前

    创建一个 HTTPModule 并在您的asp.net配置中配置它。不需要修改现有web服务的代码(甚至不需要源代码),只需在web.config中配置httpmodule。

    在httpmodule中,侦听诸如beginrequest和endrequest之类的事件,您应该能够将输入和输出记录到web服务。

    如果需要捕获web服务中抛出的异常,可以捕获错误事件,如前所述 here here .

    更新:

    根据 this page ,不能对web服务使用错误事件方法,因为web服务错误不会路由到错误事件。Microsoft建议您使用 SOAP Extensions 以记录Web服务错误。

        2
  •  4
  •   Mike Marshall    15 年前

    我们在使用 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();
    }
    

    在web service.cs文件的顶部,声明log4net ilog的一个实例

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

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

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

    在这些步骤之后,在上面的示例中,任何异常都将出现在 C:\MySv.LoC