Re[4]: Remoting как получить тип по имени
От: migel  
Дата: 27.04.04 06:52
Оценка: 2 (1)
Здравствуйте, hugo, Вы писали:


H>Вообще-то

H>
H>public virtual Type GetType(string name);
H>

H>это из класса Assembly, причем, не static, поэтому вполне естественно, что нужно иметь ссылку на нужную сборку.
H>Не имею ее, не получишь и null-а.

зато есть
 Type Type.GetType(string name)
... << RSDN@Home 1.1.3 stable >>
Re: Remoting как получить тип по имени
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 27.04.04 19:51
Оценка: 2 (1)
Здравствуйте, uss, Вы писали:

uss>2. Клиент (соответственно тоже простейший) на нем не должно быть ни сборки с требуемым классом ни интерфейса.


Низзя. Без метаданных создать объект ты конечно сможешь, но вот вызвать что либо у него ты сможешь только путем весьма хитрых извращений.
... << RSDN@Home 1.1.3 beta 2 (mobile station) >>
AVK Blog
Re[3]: Remoting как получить тип по имени
От: migel  
Дата: 28.04.04 12:26
Оценка: 2 (1)
Здравствуйте, uss, Вы писали:

uss>Здравствуйте, AndrewVK, Вы писали:



AVK>>Низзя. Без метаданных создать объект ты конечно сможешь, но вот вызвать что либо у него ты сможешь только путем весьма хитрых извращений.


uss>Что извращаться придется — я уже понял. Но как?

Забить на выполнение методов через рефлекшн, забацать сервер выполняющий дествия что-то типа

object Execute(string objectID, params string[] parameters);

и юзать его. А вообще что мещает интерфейсные сборки с сервера брать?
... << RSDN@Home 1.1.3 stable >>
Remoting как получить тип по имени
От: uss Украина  
Дата: 26.04.04 12:16
Оценка:
Подскажите как справиться.
Ситуация:
1. Сервер (простейший) + dll — на с классом (клас от MBR)
2. Клиент (соответственно тоже простейший) на нем не должно быть ни сборки с требуемым классом ни интерфейса. Знаем только имя класса.

Необходимо создать client activated экзепляр класса.

Заранее спасибо!
Re: Remoting как получить тип по имени
От: hugo Австрия  
Дата: 26.04.04 12:27
Оценка:
Здравствуйте, uss, Вы писали:

uss>Подскажите как справиться.

uss>Ситуация:
uss>1. Сервер (простейший) + dll — на с классом (клас от MBR)
uss>2. Клиент (соответственно тоже простейший) на нем не должно быть ни сборки с требуемым классом ни интерфейса. Знаем только имя класса.

uss>Необходимо создать client activated экзепляр класса.


uss>Заранее спасибо!




Gets the Type object with the specified name in the assembly instance.


public virtual Type GetType(string name);
Re[2]: Remoting как получить тип по имени
От: migel  
Дата: 26.04.04 13:45
Оценка:
Здравствуйте, hugo, Вы писали:

H>

H>Gets the Type object with the specified name in the assembly instance.


H>
H>public virtual Type GetType(string name);
H>


И получиш null если имя не полное, а если полное то получиш вызов делегата подписанного на AppDomain.AssemblyResolve текущего домена.
Так что придеться нв сервер лезть за сборкой типов.
... << RSDN@Home 1.1.3 stable >>
Re[3]: Remoting как получить тип по имени
От: hugo Австрия  
Дата: 26.04.04 13:50
Оценка:
Здравствуйте, migel, Вы писали:

M>Здравствуйте, hugo, Вы писали:


H>>

H>>Gets the Type object with the specified name in the assembly instance.


H>>
H>>public virtual Type GetType(string name);
H>>


M>И получиш null если имя не полное, а если полное то получиш вызов делегата подписанного на AppDomain.AssemblyResolve текущего домена.

M>Так что придеться нв сервер лезть за сборкой типов.

Вообще-то
public virtual Type GetType(string name);

это из класса Assembly, причем, не static, поэтому вполне естественно, что нужно иметь ссылку на нужную сборку.
Не имею ее, не получишь и null-а.

Я имел в виду, что в таком случае можно создать объект фабрики, которму передавать имя класса,
а объект уже создавать на сервере с использованием GetType.
Re: Remoting как получить тип по имени
От: uss Украина  
Дата: 27.04.04 14:27
Оценка:
Последовал выше выше написанным советам.
Получил следующее:

На сервере есть сборка с классом

public class GetRemoteType : MarshalByRefObject,IGetRemoteType
{
public Type GetRemoteTypeByName(string typeName)
{
Assembly ass = Assembly.Load("TestObject");
Type t = ass.GetType(typeName);
return t;
}

}
На клиенте:

IGetRemoteType igrt = (IGetRemoteType)Activator.GetObject(
typeof(IGetRemoteType),url);

Type t = igrt.GetRemoteTypeByName("TestObject.Test");

При попытке инициализировать t выдает ошибку:
'System.Runtime.Serialization.SerializationException'

Кто должен быть [Serializable]? Класс Test? Не помагает.

Заранее спасибо за совет.
Re[2]: Remoting как получить тип по имени
От: uss Украина  
Дата: 28.04.04 11:59
Оценка:
Здравствуйте, AndrewVK, Вы писали:


AVK>Низзя. Без метаданных создать объект ты конечно сможешь, но вот вызвать что либо у него ты сможешь только путем весьма хитрых извращений.


Что извращаться придется — я уже понял. Но как?
Re[3]: Remoting как получить тип по имени
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.04.04 12:18
Оценка:
Здравствуйте, uss, Вы писали:

uss>Что извращаться придется — я уже понял. Но как?


Ты сначала ответь зачем?
... << RSDN@Home 1.1.3 stable >>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.