IIS 7日志记录Web服务方法

8
我有一个托管在IIS 7下的Web服务(不是WCF服务),该Web服务有两个方法:method1和method2。
我想区分对method1和method2的请求,而不修改Web服务代码。
在IIS 7日志下,我可以看到对Web服务的请求,“cs-uri-stem”字段中记录了Web服务URL,但“cs-uri-query”字段为空。 是否有任何方式记录Web服务方法的请求,而不修改Web服务代码?

你在使用 ASMX 的时候受到了很大的限制。你应该转向 WCF,这样做会变得更加容易。 - John Saunders
如何使用WCF完成这个任务?这可能会对我有所帮助,ASMX服务调用WCF服务,而且我可以访问托管WCF服务的IIS和机器。 - Life is more than this
1
只需打开WCF跟踪 - John Saunders
3个回答

3

您可以在处理管道的各种方法中记录所有传入请求。例如,在您的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
}

2
我不想修改应用程序代码,应用程序已经在生产环境运行了... 不知道是否有一种方法可以从IIS级别实现! - Life is more than this

1
多年以后,我不得不访问一个有数百个方法的ASMX,但是将其转换为WCF是不可能的。这里有一个ASMX扩展点,允许您记录方法名称而无需访问所有方法。在这里,我使用log4net来记录方法名称,具体情况可能有所不同。
首先,创建一个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>

-2
这是微软官方文章: http://support.microsoft.com/kb/313437 1- 启动Internet信息服务(IIS)管理器。
2- 展开ServerName,然后展开Web Sites或FTP站点。右键单击要启用日志记录的网站或FTP站点,然后单击“属性”。
3- 单击“Web Site”选项卡或单击“FTP Site”选项卡。
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. 单击“确定”。


我在这些日志中没有看到Web服务调用,也没有看到错误... - DestyNova

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接