如何确定Web服务中调用的Web方法

时间:2008-11-07 01:02:16

标签: c# asp.net web-services

情况就是这样。我有一个asp.net webservice应用程序...说一个名为api.asmx的页面

在后面的代码中我有几种方法,例如:

[WebMethod(Description="Method1")]
public int GetSomething(int num1, int num2){
  try{
    return SomeObject.DatabaseCall.DoSomething(num1, num2);
  }
  catch(Exception ex){
    object[] pars = new object[] { num1, num2 };
    LogError("GetSomething", pars, ex);
  }
}

[WebMethod(Description="Method2")]
public int GetSomething2(string w, string j, int f){
  try{
    return AnotherObject.DoSomething(w, j, f);
  }
  catch(Exception ex){
    object[] pars = new object[] { w, j, f };
    LogError("GetSomething2", pars, ex);
  }
}

当然,这只是两个简单的例子,如果抛出异常,我可以记录方法调用和传入的参数。

还有其他办法吗?有没有办法可以提取被调用的方法和/或参数。我想我希望有人会告诉我,我可以拥有某种功能,如:

LogError(ex);

在该函数中,我可以访问一些将公开被调用方法的服务器或环境变量。也许类似于CurrentContext.WebServiceCall.Magic属性......我是否需要将所有调用包装在try / catch中,然后输入方法名称和参数,或者是否有另一种方法来访问此信息。

希望这个问题太愚蠢了。

3 个答案:

答案 0 :(得分:2)

任何未处理的异常都会冒泡到Global.asax文件中的Application_Error事件。从那里,您可以调用Server.GetLastError()来检索Exception实例。

一旦遇到异常,就可以查看堆栈跟踪。您还可以访问Request对象,以便准确了解客户端的内容。

答案 1 :(得分:1)

异常对象具有StackTrace属性。您的输入方法应该在堆栈中。

答案 2 :(得分:0)

您的LogError方法可以调用Environment.StackTrace。然后它会“知道”什么方法称它。