如何从Web服务中获取参数值

时间:2011-03-01 15:42:35

标签: asp.net web-services asmx

我有一个Web服务(ASP.NET .asmx页面),出于调试目的,我需要记录对webservice的所有调用,包括传递给每个调用的所有参数的值。所以基本上每个WebMethod应该做的第一件事是记录它的状态,其中包含传递给它的所有参数值的详细信息。

到目前为止一切顺利。复杂的是我还想要一种获取参数值的自动方式 - 有很多具有不同签名的web方法,其中一些具有多达约30个参数,因此针对每个特定参数进行手动编码可能会非常容易出错。我宁愿能够调用一个查看当前Http上下文的方法,并自动使用它来获取和解析客户端传入的任何内容。

但是我遇到了障碍。当我查看HttpContext.Current.Request时,事实证明Form和QueryString集合都是空的。因此,如果传递给webmethod的参数不在这些集合中,那么它们会在哪里?有谁知道我怎么能找回它们?

3 个答案:

答案 0 :(得分:1)

您可以使用SOAP extensions并按照this post中的示例记录具有方法名称和参数的请求。

答案 1 :(得分:1)

您可以使用AOP技术完成此任务。考虑PostSharp,您可以创建如下自定义方面:

[Serializable]
public class TraceAttribute : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionArgs args)
    {
        Trace.WriteLine(string.Format("Entering {0}", args.Method.Name));

        for (int i = 0; i < args.Arguments.Count; i++)
        {
            Trace.WriteLine(string.Format("    {0}", args.Arguments.GetArgument(i)));
        }
    }
}

然后将其应用于您的网络服务方法:

[WebMethod, Trace]
public string HelloWorld()
{
    return "Hello World";
}

答案 2 :(得分:0)

SOAP扩展是更好的选择。这是另一个将SOAP request and SOAP response检索为XML的示例。您所做的就是将XML解析为retreive参数名称值对。