我正在IIS 6.0上运行ASP.NET WebService,它在客户站点的%systemroot%\System32\LogFiles\W3SVC1
日志中显示了大量HTTP 500(可能只是来自WebService的例外)。
是否可以在不使用IIS或IIS插件修改WebService的情况下记录这些HTTP响应的内容和请求?
我想过使用Wireshark或Fiddler来嗅探HTTP流量,但我更愿意在IIS中打开一个选项让他记录通信(这不应该是很难的无论如何它都记录了请求的URL)
答案 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服务中引发的异常,您可以按照here和here所述捕获错误事件。
<强>更新强>
根据this page,您不能将错误事件方法与Web服务一起使用,因为Web服务错误不会路由到Error事件。 Microsoft建议您使用SOAP Extensions来记录Web服务错误。