IIS 7 日志记录 Web 服务方法
Posted
技术标签:
【中文标题】IIS 7 日志记录 Web 服务方法【英文标题】:IIS 7 Logging Web Service methods 【发布时间】:2012-01-24 18:44:51 【问题描述】:我有一个托管在 IIS 7 下的 Web 服务(不是 WCF 服务),该 Web 服务有两种方法:method1 和 method2。
我希望在不修改 Web 服务代码的情况下区分对方法 1 的请求和对方法 2 的请求。
在 IIS 7 日志下,我可以看到对 Web 服务的请求,Web 服务 URL 记录在“cs-uri-stem”字段下,但“cs-uri-query”字段为空。
是否可以在不修改网络服务代码的情况下记录网络服务方法的请求?
【问题讨论】:
您对 ASMX 的限制非常有限。您应该转移到 WCF,这很容易。 如何使用 WCF 做到这一点?这可能对我有帮助,ASMX 服务调用 WCF 服务,我可以访问 IIS 和托管 WCF 的机器。 只需开启WCF Tracing。 【参考方案1】:您可以在处理管道的各种方法中记录所有传入请求。例如,在您的Global.asax
中添加BeginRequest
的处理程序:
Application_BeginRequest( object sender, EventArgs e )
HttpApplication app = (HttpApplication)sender;
HttpContext ctx = app.Context;
var requestUrl = ctx.Request.Url;
// the uri should be of a form:
// http://yoursite/theservice.asmx/MethodName
【讨论】:
我不想修改应用程序代码,应用程序已经在生产环境中运行了……不知道从IIS层面有没有办法这样做!【参考方案2】:多年后,我不得不访问具有数百种方法的 ASMX,但无法转换为 WCF。这是一个 ASMX 扩展点,它允许您在不访问所有方法的情况下记录方法名称。在这里,我使用 log4net 来记录方法名称,YMMV
首先,创建一个 SoapExtension 类:
namespace MyNamespace
public class WebMethodLogger : SoapExtension
private static readonly ILog _log = LogManager.GetLogger(typeof(WebMethodLogger));
public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
return null; //No state
public override object GetInitializer(Type serviceType)
return null; //No state
public override void Initialize(object initializer)
//Do nothing
public override void ProcessMessage(SoapMessage message)
if (message.Stage == SoapMessageStage.AfterDeserialize)
_log.Debug(message.MethodInfo.MethodInfo.Name);
然后,在您的 web.config 中注册扩展:
<system.web>
...
<webServices>
<soapExtensionTypes>
<add type="MyNamespace.WebMethodLogger, MyAssembly"
priority="1"
group="High" />
</soapExtensionTypes>
</webServices>
...
</system.web>
【讨论】:
【参考方案3】:这是来自微软的官方文章: http://support.microsoft.com/kb/313437
1- 启动 Internet 信息服务 (IIS) 管理器。
2- 展开 ServerName,然后展开 Web 站点或 FTP 站点。右键单击要启用日志记录的网站或 FTP 站点,然后单击“属性”。
3- 单击网站选项卡,或单击 FTP 站点选项卡。
4- 单击以选中启用日志记录复选框。
5- 在活动日志格式框中,单击您要使用的格式。
6- 单击属性,然后指定所需的设置。例如,如果您使用 W3C 扩展日志文件格式,请按照以下步骤操作:
一个。如果您正在运行 IIS 6.0,请单击“常规”选项卡。如果您运行的是 IIS 5.0 或 IIS 4.0,请单击“常规属性”选项卡。指定要用于创建新日志文件的计划。例如,要每天创建一个新的日志文件,请单击 Daily。
b.如果要使用本地时间,请单击以选中“使用本地时间进行文件命名和翻转”复选框。
注意午夜本地时间用于除 W3C 扩展日志文件格式之外的所有日志文件格式。默认情况下,W3C 扩展日志文件格式使用协调世界时(格林威治标准时间)的午夜。要使用本地时间午夜,请单击以选中“使用本地时间进行文件命名和翻转”复选框。
c。如果您运行的是 IIS 6.0,请单击“高级”选项卡。如果您运行的是 IIS 5.0 或 IIS 4.0,请单击扩展属性选项卡。
d。指定所需的选项。例如,指定“自定义数据”部分中列出的属性。点击确定。
e。点击确定。
【讨论】:
我在这些日志中没有看到 Web 服务调用,也没有看到错误...以上是关于IIS 7 日志记录 Web 服务方法的主要内容,如果未能解决你的问题,请参考以下文章