Вот обходной путь, который можно использовать для получения списка интерфейсов.
Определение открытого интерфейса IDescriptor
public interface IDescriptor
{
List<string> GetInterfaces();
}
Определение базового класса, реализующего интерфейс:
public class BaseMasrhalByRefObject : MasrhalByRefObject, IDescriptor
{
public BaseMasrhalByRefObject() : base() {}
public List<string> GetInterfaces()
{
List<string> types = new List<string>();
foreach(Type i in GetType().GetInterfaces())
{
types.Add(i.AssemblyQualifiedName);
}
return types;
}
}
Чем использовать BaseMasrhalByRefObject вместо MasrhalByRefObject для определения объекта службы:
public class MyServiceObject : BaseMasrhalByRefObject, MyInterface1, MyInterface2, ...
{
// Add logic method
}
В AppDomain A создайте ссылочный объект MyServiceObject.В AppDomain B получите прокси удаленного объекта.Прокси может быть приведен к IDescriptor:
public List<Type> GetInterfaces(MasrhalByRefObject proxy)
{
List<Type> types = new List<Type>();
IDescriptor des = proxy as IDescriptor;
if (des != null)
{
foreach(string t in des.GetInterfaces()) // this is a remote call
{
types.Add(Type.GetType(t);
}
}
return types;
}