Remoting vyprosche?

31 отговора 1157 прегледа
#1

Remoting vyprosche?

Zdraveite !
Problema mi e slednia :
Chrez Remoting tehnologiata i VB.NET se mychim da napravim Aplication Server.
Podkarahme go gore-dolu za sega , obache imam neshto za pitane :
Naprimer pt Clientskoto prilojenie se vika method na AppServer-a , koito method triabva da zapylni obekt DataTable prez ADO.NET ot MS SQL Server 2000.
Vyprosyt mi e :
Po kakyv nachin stava predavaneto na DataTable-a na APp Servera , i toi po kakyv nachin go vryshta . Zashtoto pyrvia nachin koito mi doide na uma e kato vhoden parametyr na methoda . Obache ako predam DataTable-a ByRef -> toest adresa mu e na Clientskoto prilojenie ...Ako e ByVal , togava kakvoto i da se pravi na AppServera to ne se vryshta obratno pri clienta ....
T.e. kakyv e nachina za predavane i vryshtane na danni ot i kym AppServera ?
Като допъlnitelno info za AppServer-a : Izpolzvame :
MarshalingByRef, Server Acivated Object,SingleCall

Blagodaria predvaritelno!

P.S. -> ideiata za cluba e mnogo dobra . Tyi kato tova e nova tehnologia , nadiavam se malko po malko da se ojivi ....Az lichno pisha na VB.NET ot malko poveche ot godina , no vse oshte imam oshte mnogo,mnogo da ucha ....

Отговор
в отговор на БOИЛ #2

Re: Remoting vyprosche?

az lichno bih go serializiral kato XML pri clienta, prashtam go kato stream na server-a, server-a poluchava xml stream, ot tozi xml si prava data table na server-a, rabotia si varhu neia, pak ia serializiram v xml s promenite i ia prashtam kato stream obratno na clienta koito si ia obrushta v datatable

tova koeto ti se opitvash na napravish mnogo prilicha na DCOM, koeto e veche mnogo ostariala tehnologia i e izcialo zamestena ot web services/SOAP/XML scenarios

tova koeto az se opitvam da ti obesna mnogo prilicha na web services

taka che moeto mnenie da razuchish web services i da minesh kam tozi rod komunikacia za da ne ti se naloji da prenapisvash skoro app server-a si :))))


XM TurboCT .. where comfort meets power
Отговор
в отговор на БOИЛ #3

Re: Remoting vyprosche?

Пиши на кирилица бе, кютук

Отговор
в отговор на шeф нa Coди Дeвня #4

Re: Remoting vyprosche?

Blagodaria ti za otgovora ....
Za Web Services chestno kazano ne se biah zamislial ...No vse pak Remoting uj e naslednik na DCOM /pone taka go obiaviavat/ ...A za Web Services - te ne sa li za Web Aplications ? Ako sa -> niama da mi svyrshat rabota ....

Отговор
в отговор на rosen #5

Re: Remoting vyprosche?

Ti mai ne si malko ГЛУПАВ .....Nai - veroiatno si obyrkal cluba ...."Cigani i Romi" se namira malko po-gore...

Отговор
в отговор на БOИЛ #6

Re: Remoting vyprosche?

Мне, и за други работи ще станат. Какво ще ползва методите на сървъра няма голямо значение... дали друг сървър (web) или клиентско приложение... Генерираш си проксито и си пушка :)

ASNatives can usually be found in dark rooms where the only light is the glow of a CRT …
Отговор
в отговор на БOИЛ #7

Re: Remoting vyprosche?

по принцип да ... web services се появиха когато DCOM срещна the internet ... и тъй като DCOM има нужда от paired connection, а това през http не става ... и се появиха web services ... които според мене са гениални ... web services са subdomain на .net remoting infrastructure ... като всяка технология е направена да решава определен домейн от проблеми ...

ако мислиш че имаш нужда точно от remoting има една книга "Advanced .NET Remoting" ... не съм я чел ама мисля че ще ти свърши работа ако можеш да си я поръчаш ...

освен това решението което аз ти предложих прилича на това което всъщност става при remoting: значи, за да може един обект от един application domain да се подаде като параметър на метод на обект от друг application domain "нашия" обект трябва да се сериализира и прати на другия application и там да се реконструира. За да стане това обекта трябва да бъде маркиран с [serializable] custom attribute или да имплементира ISerializable интерфейс. Локални обекти които не могат да бъдат сериализирани не могат да бъдат предавани като параметри на друга апликация .. тоест те не са remotable ...

имаш 2 начина да предадеш един обект на remote application:
1. by value: тоест копие на обекта се сериализира се праща на remote application като binary stream където се реконструира отново
2. by ref: тоест праща се reference към обекта на remote application-а, където от този ref се конструира proxy към нашия обект ... и channal-a по който текат messages остава отворен ... всяко извикване на метод на този обект генерира roundtrip между proxy/stub двойката ... така че с DataTable ... просто performance-a ще си разкаже играта ...

доколкото разбрах тебе те интересува втория начин ...

тука има едно обаче ...

начи DataTable наследява MarshalByValueObject който както става ясно от заглавието му не може да се предава by ref при remoting ... обаче това е направено с цел ... по принцип е лоша идея да се предават by ref големи обекти при remoting, защото по channel-a между proxy/stub двойката става прекалено голям трафик и следователно performance-a пада значително ...

по-принцип DataSet и DataTable са единствените обекти който наследяват ISerializable и могат да се ползват при remoting ама by value :(

такааа ... начи аз лично виждам два начина за процедиране от тук нататък -- my way or the hard way :)))))

1. the hard way: правиш си свой клас който наследява MarshalByRefObject и правиш copy/paste от сорсовете на DataTable там ... което лично на мене ми звучи като да те пуснат в ада и ти да си избереш най-големия огън и да се цопнеш в него :)))

2. my way: пращаш си DataTable by value, променяш си го и го връщаш на клиента като return value, при което той си сменя reference-a към него и готово ... ако не можеш да върнеш DataTable като return value, тогава го сериализираш в XML или в квото си решиш пращаш го като string на клиента, на сървъра го реконструираш в DataTable, работиш си върху него, пак го сериализираш на string, връщаш го на клиента като return value, клиента си го рекунструира на DataTable и всички са щастливи ... и не губиш performance :))))

нещо то сорта :

DataTable myMethod(DataTable dt);





XM TurboCT .. where comfort meets power
Отговор
в отговор на шeф нa Coди Дeвня #8

Re: Remoting vyprosche?

Отново ти благодаря за обстойния отговор...
Тук също го пробвахме този вариант /DataTable-a да се връща като Rетурн Валуе / и се получи/и то без да сериализра / ... Най-вероятно ще се спрем на този вариант ...
А между впрочем четох няколко глави от книгата на Инго Раммер - Advenced .Net Remoting, където в прав текст си пишеше ,че когато се изпозва MarshalByValue , тогава изпълнението въобще не е "Remoting" а си се изпълнява на клиента ....По този начин според мен си губи смисъла ...

Отговор
в отговор на БOИЛ #9

Re: Remoting vyprosche?

начи сериализация винаги има ... дали ще я направиш ти или .нет е въпрос на ентусиазъм :)))

а за 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
Отговор
в отговор на шeф нa Coди Дeвня #10

Re: Remoting vyprosche?

Добър отговор и добър пример. И все пак идеята за ползване на WebService си е по-добро решение. Само да не тръгнеш да предаваш самия DataTable през уеб метода, напъхай си го в DataSet.



Отговор
в отговор на шeф нa Coди Дeвня #11

Re: kym shef na sodi devnia

dai poveche info za tova serializirane s xml
kakva e ideiata pri nego
niakakva knijka ili ...

Отговор
в отговор на novak #12

Re: kym shef na sodi devnia

Дръж една прилична лекция за сериализация, че даже и на български:

[линк]

Ето и нещо за remoting, ама е малко basic де:

[линк]



Отговор
в отговор на шeф нa Coди Дeвня #13

Web Services vs. Remoting

Да ама не е баш така както го обясняваш.
Web Service-те са полезни и приложими когато имаш client-pull сценарии (на по-прост език когато клиента прави заявки към сървъра и не е необходимо сървъра да генерира събития при клиента)
Remoting-ът е предназначен точно за тези случаи (client-push сценарии) в които е необходимо сървъра да предизвика събитие в клиента.
Дали ще се използва Web Service или Remoting зависи основно от това дали е необходимо (или дали се планира) сървъра да генерира събития в клиента.

"— Треска те хваща, а? — шепнеше тихо, с подмигване бай Ганьо"
БАЙ ГАНЬО СЕ ВЪРНА ОТ ЕВРОПА
Отговор
в отговор на didi #15

Re: Remoting vyprosche?

И аз доста работи не знам, но не ми беше идвало на ума за всичките да си призная в съответния форум

peace, love, unity
Отговор
в отговор на Vroomfundel #16

Re: Remoting vyprosche?

Е то за целта трябва или много въображение или глупост в излишък

"— Треска те хваща, а? — шепнеше тихо, с подмигване бай Ганьо"
БАЙ ГАНЬО СЕ ВЪРНА ОТ ЕВРОПА
Отговор
#17

Re: kym shef na sodi devnia

TAPACI!!!!

Ebah mu mamata!!! Are Remoting-a ne go chuvate, shte go prejiveia, ama da mi serializirate dataset s XmlWriter, ebi mu maikata!!! ds.GetXml() nai-malkoto be! da go eba!!!

Отговор
в отговор на Ebektor #18

Re: kym shef na sodi devnia

1. никъде не става въпрос за DataSet, а за DataTable, който няма такъв метод
2. с GetXml нямаш flexibility, тоест как ще земеш първия фийлд, но без втория, но с третия, без ред 3, и т.н. ...
3. освен това GetXml си го форматира както на него му е кеф, а не както на тебе ... затова аз лично предпочитам да си го напиша сам ...
4. ако в тоя DataSet имам 10 DataTables, а на човека му трябва само една ...
5. с GetXml имаш доста по-голям overhead отколкото с WriteXml защото се връща като стринг ...
и мисля да спра до тук ... УМНИКО ...


XM TurboCT .. where comfort meets power
Отговор
в отговор на шeф нa Coди Дeвня #19

Re: kym shef na sodi devnia

be hubavo ti e kazal Ebektora ama...

1, 2, 3, 4, 5 - XSLT da si chuwal da se spomenawa? Ili si nad tia neshta?
5. Aha, shto ne si poglednesh poslednia red...sb.ToString(), twa na kwo go obryshta na unsigned int li?!

Izobshto pyk niama da obsyjdam 'genialnata' idea sys sobstwenoto serializirane i premiatane kym servera i prochie....te MS remotinga sa go izmislili ei taka shtoto imalo mnogo prazno miasto w help file-a.

Отговор
в отговор на gruhal #20

Re: kym shef na sodi devnia

я, още един гений ... абе тука било бъкано бе ... начи първо ще форматираш XML-a и после ще го трансформираш в друг XML ... типично за VB програмист, който пише с голямата лопата ... и през това време юзера ще иде за кафенце докато си чака резултата ...

и къв ToString() те гони та не може да спиш ... имах предвид това:
Note GetXml returns XML as a string, and therefore, requires more overhead than using WriteXml to write XML to a file.


XM TurboCT .. where comfort meets power
Отговор