簡體   English   中英

如何記錄在IIS 6.0上運行的Web服務的通信?

[英]How to log communication of a WebService running on IIS 6.0?

我正在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();
}

在Web服務.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:\\ mysvc.log中

創建一個HTTPModule並在ASP.NET配置中對其進行配置。 您不需要修改現有Web服務的代碼(甚至不需要源代碼),只需在Web.config中配置HTTPModule。

在HTTPModule中,偵聽諸如BeginRequest和EndRequest之類的事件,您應該能夠將輸入記錄到Web服務以及從Web服務輸出。

如果您需要捕獲Web服務中引發的異常,則可以按此處此處所述捕獲Error事件。

更新:

根據此頁面 ,您不能對Web服務使用Error事件方法,因為Web服務錯誤不會路由到Error事件。 Microsoft建議您使用SOAP擴展來記錄Web服務錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM