Как я могу определить, какой WebMethod был вызван в веб-сервисе - PullRequest
3 голосов
/ 07 ноября 2008

Ситуация такая. У меня есть приложение веб-службы asp.net ... скажем, страница называется 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 ]

2 голосов
/ 07 ноября 2008

Любые необработанные исключения будут переданы в событие Application_Error в файле Global.asax. Оттуда вы можете вызвать Server.GetLastError (), чтобы получить экземпляр Exception.

Если у вас есть исключение, вы можете посмотреть трассировку стека. У вас также будет доступ к объекту Request, чтобы вы могли точно видеть, что пришло от клиента.

1 голос
/ 07 ноября 2008

Объект исключения имеет свойство StackTrace. Ваш метод ввода должен быть в стеке.

0 голосов
/ 07 ноября 2008

Ваш метод LogError может вызвать Environment.StackTrace . Тогда он «узнает», какой метод вызвал его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...