情况就是这样。我有一个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中,然后输入方法名称和参数,或者是否有另一种方法来访问此信息。
希望这个问题太愚蠢了。
答案 0 :(得分:2)
任何未处理的异常都会冒泡到Global.asax文件中的Application_Error事件。从那里,您可以调用Server.GetLastError()来检索Exception实例。
一旦遇到异常,就可以查看堆栈跟踪。您还可以访问Request对象,以便准确了解客户端的内容。
答案 1 :(得分:1)
异常对象具有StackTrace属性。您的输入方法应该在堆栈中。
答案 2 :(得分:0)
您的LogError方法可以调用Environment.StackTrace。然后它会“知道”什么方法称它。