Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > Как определить откуда вызван метод?


Автор: Moid 17.4.2013, 11:51
Как узнать метод вызван удаленно или локально?

т.е. в методе нужно сделать условие  был ли метод вызван исбользуя MarshalByRefObject либо он вызван внутри сервиса.

Автор: Moid 17.4.2013, 12:44
Получилось так:
Код

public static bool IsRemotingCall()
{
      var baseMethod = new StackTrace(2).GetFrame(1).GetMethod();

      return baseMethod.DeclaringType != null && baseMethod.DeclaringType.FullName != null
             && baseMethod.DeclaringType.FullName.StartsWith("System.Runtime.Remoting");
}


Возможно через RemotingServices можно красивее сделать.

Автор: Moid 9.8.2013, 12:53
Подниму вопрос, через StackTrace при частых запросах наблюдаются неприятные тормоза.

Автор: jonie 28.8.2013, 15:22
Думаю что никак. Разве что поковырять имя домена и его параметры.

Если возможно, то используйте "хак": заведите два конструктора (один с каким-нибудь параметром например), один будет использован remoting-ом, второй нативным вызовом. Первый пометьте как Obsolete - чтобы при копиляции при прямом использовании видеть проблему вызова "не того конструктора".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)