|
Страници по тази тема: 1 | 2 | 3 | 4 | >> (покажи всички)
Тема
|
Remoting vyprosche?
|
|
Автор |
БOИЛ () |
Публикувано | 27.06.03 08:58 |
|
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 ....
| |
|
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
| |
Тема
|
Re: Remoting vyprosche?
[re: БOИЛ]
|
|
Автор | rosen (Нерегистриран) |
Публикувано | 28.06.03 17:18 |
|
Пиши на кирилица бе, кютук
| |
|
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 ....
| |
Тема
|
Re: Remoting vyprosche?
[re: rosen]
|
|
Автор |
БOИЛ () |
Публикувано | 30.06.03 08:49 |
|
Ti mai ne si malko ГЛУПАВ .....Nai - veroiatno si obyrkal cluba ...."Cigani i Romi" se namira malko po-gore...
| |
Тема
|
Re: Remoting vyprosche?
[re: БOИЛ]
|
|
Автор |
Fahrenheit (ASNative) |
Публикувано | 30.06.03 11:18 |
|
Мне, и за други работи ще станат. Какво ще ползва методите на сървъра няма голямо значение... дали друг сървър (web) или клиентско приложение... Генерираш си проксито и си пушка :)
ASNatives can usually be found in dark rooms where the only light is the glow of a CRT …
| |
|
по принцип да ... 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
| |
|
Отново ти благодаря за обстойния отговор...
Тук също го пробвахме този вариант /DataTable-a да се връща като Rетурн Валуе / и се получи/и то без да сериализра / ... Най-вероятно ще се спрем на този вариант ...
А между впрочем четох няколко глави от книгата на Инго Раммер - Advenced .Net Remoting, където в прав текст си пишеше ,че когато се изпозва MarshalByValue , тогава изпълнението въобще не е "Remoting" а си се изпълнява на клиента ....По този начин според мен си губи смисъла ...
| |
|
начи сериализация винаги има ... дали ще я направиш ти или .нет е въпрос на ентусиазъм :)))
а за 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
| |
|
Добър отговор и добър пример. И все пак идеята за ползване на WebService си е по-добро решение. Само да не тръгнеш да предаваш самия DataTable през уеб метода, напъхай си го в DataSet.
| |
|
Страници по тази тема: 1 | 2 | 3 | 4 | >> (покажи всички)
|
|
|