我在 IIS 6.0 上运行 ASP.NET WebService,它在 %systemroot%\System32\LogFiles\W3SVC1
的日志中显示大量 HTTP 500(可能只是 WebService 的异常)在客户网站上。
是否可以在不使用 IIS 或 IIS 插件修改 WebService 的情况下记录这些 HTTP 响应和请求的内容?
我想到了使用 Wireshark或 Fiddler嗅探 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/