|
Тема |
Re: Remoting vyprosche? [re: БOИЛ] |
|
Автор |
шeф нa Coди Дeвня (full optional) |
|
Публикувано | 30.06.03 22:07 |
|
|
начи сериализация винаги има ... дали ще я направиш ти или .нет е въпрос на ентусиазъм :)))
а за MarshalByValue и MarshalByRef се бъркаш нещо ... значи това се отнася за параметрите на метода на обекта, а не за самия обект ... обекта ти е винаги remote ... щото ако можеше ти да отидеш при него или той да дойде при тебе нямаше да има нужда от remoting въобще ... :))
това което са искали да кажат в книгата е че методи на обекта-параметър който маршал по референсе към сървъра се изпълняват на клиента ... скив по-долу примера ... начи при маршал бай реф: Execute ще се изпълни на клиента обаче тебе не те интересува това толкова колкото те интересува MyRemoteMethod, а той винаги се изпълнява на сървъра ....
примерно:
class CMyLocalObject
{
void Execute()
{
doSomeThingHere();
}
};
class CMyRemoteObject
{
void MyRemoteMethod(CMyLocalObject o)
{
for ( int i = 0 ; i < 1000 ; i++ )
o.Execute();
}
};
void main()
{
CMyLocalObject o;
CMyRemoteObject r = CreateObject(...);
r.MyRemoteMethod(o);
}
начи представи си какво става при подаване на параметъра с референсе и като валуе :)))
начи при валуе се праща копие на CMyLocalObject при което MyRemoteMethod завърта един бърз цикъл до 1000 и излиза ... всичко става на сървъра щото той си има копие на CMyLocalObject и не трябва за нищо да се обръща към клиента ...
а при референсе се праща референсе от тип CMyLocalObject на MyRemoteMethod при което той конструира прокси код който реферира към CMyLocalObject и при всяко едно извикване на CMyLocalObject::Execute() се прави извикване по проксито на CMyLocalObject::Execute() ... тоест имаш 1000 отивания и връщания между клиента и сървъра .... което хич не е гот :(
XM TurboCT .. where comfort meets power
|
| |
|
|
|