我有一个Web服务(ASP.NET .asmx页面),出于调试目的,我需要记录对webservice的所有调用,包括传递给每个调用的所有参数的值。所以基本上每个WebMethod应该做的第一件事是记录它的状态,其中包含传递给它的所有参数值的详细信息。
到目前为止一切顺利。复杂的是我还想要一种获取参数值的自动方式 - 有很多具有不同签名的web方法,其中一些具有多达约30个参数,因此针对每个特定参数进行手动编码可能会非常容易出错。我宁愿能够调用一个查看当前Http上下文的方法,并自动使用它来获取和解析客户端传入的任何内容。
但是我遇到了障碍。当我查看HttpContext.Current.Request时,事实证明Form和QueryString集合都是空的。因此,如果传递给webmethod的参数不在这些集合中,那么它们会在哪里?有谁知道我怎么能找回它们?答案 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参数名称值对。