如何确定在Web服务中调用了什么WebMethod

本文关键字:调用 什么 WebMethod 服务 何确定 Web | 更新日期: 2023-09-27 17:48:49

情况就是这样。我有一个asp.net Web服务应用程序。。。比如一个名为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中,然后键入方法名称和参数,或者是否有其他方法可以访问这些信息。

希望这个问题不要太愚蠢。

如何确定在Web服务中调用了什么WebMethod

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

一旦出现异常,就可以查看堆栈跟踪。您还可以访问Request对象,这样您就可以准确地看到来自客户端的内容。

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

您的LogError方法可以调用Environment.StackTrace。然后它就会"知道"是什么方法调用它。