【问题标题】:How can I determine what WebMethod was called in a webservice如何确定在 web 服务中调用了什么 WebMethod
【发布时间】:2008-11-07 01:02:16
【问题描述】:

情况是这样的。我有一个 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 中,然后输入方法名称和参数,或者是否有其他方法可以访问此信息。

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

【问题讨论】:

    标签: c# asp.net web-services


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多