Возможно ли с помощью отражения получить экземпляр класса вызывающих методов или любой метод в стеке вызовов? - PullRequest
2 голосов
/ 17 февраля 2010

Возможно ли использовать отражение, чтобы получить экземпляр класса вызывающего метода?

Попытка «взломать» решение для веб-сервисов, чтобы передать значение Timeout входящего вызова (Когда вы вызываете веб-сервис, который, в свою очередь, вызывает новый веб-сервис, используя WSE. Он сосет, когда клиент устанавливает тайм-аут 5 минут и следующий уровень имеет значение по умолчанию 100 секунд или наоборот.).

Я уже получил пользовательскую политику, которая вызывается при вызове экземпляра прокси .SetProxy (...). Это тот экземпляр, к которому я хочу получить доступ, но код политики, с которого я могу начать кодирование, - это 3 "уровня" ниже.

Так что мне интересно, смогу ли я получить метод стековой трассировки до 2 уровней, смогу ли я получить этот экземпляр каким-либо образом? Пока что мне удалось получить только тип этого класса, а не экземпляр.

1 Ответ

0 голосов
/ 23 февраля 2010

Я не знаком с ВФБ, но хорошо знаю рефлексию. Чтобы получить экземпляр, вам нужно что-то, что имеет ссылку или ссылку на ссылку. Если вы можете найти какой-либо класс, который имеет вызывающий объект в качестве ссылки, используйте Reflection.GetField, Reflection.GetProperty и / или Reflection.GetMethod, чтобы получить значение. Даже если это означает прохождение 5 слоев с защищенными полями, пока вы можете пройти туда, вы можете найти его. Но если это чистый прорыв, как порождение другого потока или exe, и никакая идентифицирующая информация не передается, то вам не повезло. Вам нужно будет использовать внешний источник для хранения необходимого времени ожидания, а затем указывать его для каждой стороны вызова. Используйте Red Gate .Net Reflector, чтобы посмотреть на классы для справки.

...