Asp.net IIS 7记录Web服务方法

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服务(不是WCF服务)托管在IIS7下,该web服务有两个方法:method1和method2

我希望在不修改web服务代码的情况下区分method1的请求和method2的请求

在iis7日志下,我可以看到对web服务的请求,web服务URL记录在“csuristem”字段下,但“csuriquery”字段为空


是否可以在不修改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服务调用,也看不到错误。。。