Asp.net IIS 7记录Web服务方法
我有一个web服务(不是WCF服务)托管在IIS7下,该web服务有两个方法:method1和method2 我希望在不修改web服务代码的情况下区分method1的请求和method2的请求 在iis7日志下,我可以看到对web服务的请求,web服务URL记录在“csuristem”字段下,但“csuriquery”字段为空Asp.net IIS 7记录Web服务方法,asp.net,web-services,iis,iis-7,asmx,Asp.net,Web Services,Iis,Iis 7,Asmx,我有一个web服务(不是WCF服务)托管在IIS7下,该web服务有两个方法:method1和method2 我希望在不修改web服务代码的情况下区分method1的请求和method2的请求 在iis7日志下,我可以看到对web服务的请求,web服务URL记录在“csuristem”字段下,但“csuriquery”字段为空 是否可以在不修改web服务代码的情况下记录web服务方法的请求?您可以在处理管道的各种方法中记录所有传入的请求。例如,在Global.asax中添加BeginReques
是否可以在不修改web服务代码的情况下记录web服务方法的请求?您可以在处理管道的各种方法中记录所有传入的请求。例如,在
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
}
以下是微软的官方文章: 1-启动Internet信息服务(IIS)管理器 2-展开ServerName,然后展开Web站点或FTP站点。右键单击要启用日志记录的网站或FTP网站,然后单击属性 3-单击网站选项卡,或单击FTP站点选项卡 4-单击以选中启用日志记录复选框 5-在“活动日志格式”框中,单击要使用的格式 6-单击“属性”,然后指定所需的设置。例如,如果使用W3C扩展日志文件格式,请执行以下步骤: a。如果您正在运行IIS 6.0,请单击“常规”选项卡。如果正在运行IIS 5.0或IIS 4.0,请单击“常规属性”选项卡。指定要用于创建新日志文件的计划。例如,要每天创建新的日志文件,请单击“每日” b。如果要使用本地时间,请单击以选中“将本地时间用于文件命名和滚动”复选框 注:除W3C扩展日志文件格式外,所有日志文件格式均使用午夜本地时间。默认情况下,W3C扩展日志文件格式使用午夜协调世界时(格林威治标准时间)。要使用午夜本地时间,请单击以选中“将本地时间用于文件命名和滚动”复选框 c。如果您正在运行IIS 6.0,请单击“高级”选项卡。如果正在运行IIS 5.0或IIS 4.0,请单击扩展属性选项卡 d。指定所需的选项。例如,指定“自定义数据”部分中列出的属性。单击“确定”
e。单击“确定”。几年后,我不得不访问一个包含数百种方法的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>
...
...
我不想修改应用程序代码,应用程序已在生产环境中运行。。。我想知道是否有一种方法可以从IIS级别做到这一点!你对ASMX的使用非常有限。你应该转移到WCF,在那里这很容易。如何使用WCF做到这一点?这可能对我有帮助,ASMX服务调用WCF服务,我可以访问IIS和承载WCF服务的计算机。只需打开。我在这些日志中看不到Web服务调用,也看不到错误。。。