#asp.net #web-services
#asp.net #веб-сервисы
Вопрос:
У меня есть веб-сервис ‘mywebservice’ и определенный в нем веб-метод ‘mywebmethod’. Этот веб-метод вызывает функцию ‘callme()’, которая определена в другом классе. Я хочу получить имя сервиса, который вызывает эту функцию, а также имя метода. Я хочу это в функции ‘callme()’.
—‘mywebservice.asmx.cs’
[WebMethod]
public void mywebmethod
{
callme();
}
— ‘class1.cs’
public void callme()
{
// --- I want service name(mywebservice) amp; methodname(mywebmethod) here.
}
Комментарии:
1. если это ваша реализация class1.cs, что мешает вам передавать эти параметры из каждого веб-метода, вызывающего его, очевидно, что это не лучший способ, но, основываясь на деталях в этом вопросе, это выглядит наиболее очевидным.
Provide more details and what have you tried for better responses
2. Я не хочу передавать параметры из webmethod. Я просто хочу получить имя метода и службы, которые вызывают эту функцию.
3. почему? в обоих случаях? почему вы не хотите передавать параметры? почему вам нужно имя сервиса и метод в вызываемом методе? Причина этих «почему» заключается в понимании реальной проблемы.
4. Условие таково, что я не могу изменить веб-сервис / webmethod. Я могу изменить callme(). Таким образом, я могу получить там имя вызывающего метода. Я думаю, что это довольно просто, я просто не знаю, как это сделать.
5. что вы хотите сделать с
methodname
, возможно, цель может быть достигнута другими, более простыми способами. Посмотрите на HttpContext , возможно, вы получите то, что ищете.
Ответ №1:
Одним из возможных способов может быть использование класса StackTrace (см. Раздел пример для начала), чтобы вернуться к стеку вызовов для получения имени типа и метода — это даст вам имена для класса / метода, реализующего сервис.
Имейте в виду, что построение трассировки стека является дорогостоящей операцией — поэтому я бы рекомендовал передавать необходимую информацию в качестве параметров методу. Кроме того, если бы вы могли указать, зачем вам нужна эта информация (название сервиса и метода), вы могли бы получить лучший ответ для решения вашей реальной проблемы.