Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

web servisi, vracanje niza objekata i tako...

[es] :: .NET :: web servisi, vracanje niza objekata i tako...

[ Pregleda: 3740 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sandra_G
Aleksandra Glusac
Programer

Član broj: 66979
Poruke: 68
*.mediaworksit.net.

ICQ: 298551171


Profil

icon web servisi, vracanje niza objekata i tako...27.10.2006. u 13:38 - pre 213 meseci
Ovako... imam win aplikaciju iz koje upucujem poziv web servisu da mi vrati niz objekata neke klase. Te klase se nalaze na strani servisa, naravno. Ona ima i svoje metode, property-je itd.
E, sad... Ja na strani klijenta primim taj niz, ali ne mogu da pristupim metodama tog objekta... Zasto to?
Kod je otprilike sledeci (iz win aplikacije):

Servis service = new Servis();
Servis.Klasa[] nizObjekata = new Servis.Klasa[1000];
nizObjekata = service.GetArrayOfObjects(); // ovo vraca niz objekata klase

//posto ta klasa ima public metodu GetProperty(), trebalo bi da mogu nju da pozovem iz win klijenta, zar ne?
int property = nizObjekata[0].GetProperty();
//ali to ne radi, tj. ne mogu nista da pozovem... IntelliSense mi ne vraca nista kada "udarim" tacku posle nizObjekata[0]

//ne radi ni kada konvertujem
int property = (nizObjekata[0] as Servis.Klasa).GetProperty();

Dakle, ove metode uopste ne mogu da pozovem, kao da se "ne vide", tj, kao da su private...

Probala sam i da te iste klase napravim i na klijentu, pa samo nizu klasa iz klijenta dodelim rezultat poziva servisu (dakle, niz klasa servisa), ali javlja da klase nisu kompatibilne?

Malo sam "zapela", pa pomagajte....
The important thing is not to stop questioning. Curiosity has its own reason for existing. - Albert Einstein
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
212.200.27.*



+311 Profil

icon Re: web servisi, vracanje niza objekata i tako...27.10.2006. u 14:19 - pre 213 meseci
To se ponaša upravo onako kako si opisala.
Naime, na klijentu ti dobijaš instance klasa koje je dodavanjem web reference generisao VS na osnovu šeme koju je dobio od web servisa.
Ove generisane "Proxy" klase se razlikuju od tvojih u tome što ne sadrže nikakve metode i sadrže samo public promenljive koje su konstrisane na osnovu public propertija i public promenljivih tvoje klase.
Source ovih klasa možeš naći u source falju kada ekspanduješ tvoju web referencu.
Sad da bi dobila instance svoje klase ili napiši kod koji vrši prepisivanje podataka iz proxy klase u tvoju klasu ili probaj sa prepravkom generisanog fajla za web referencu gde ćeš umesto punjenja objekta proxy klase probati da puniš baš objekat tvoje klase (što ne mora da znači da će raditi uvek ako je tvoja klasa malo složenija).

Pozdrav!
 
Odgovor na temu

Sandra_G
Aleksandra Glusac
Programer

Član broj: 66979
Poruke: 68
*.mediaworksit.net.

ICQ: 298551171


Profil

icon Re: web servisi, vracanje niza objekata i tako...27.10.2006. u 15:20 - pre 213 meseci
Hmmm... pa to mi se uopste ne svidja :) Ali hvala na objasnjenju, vec sam pomislila da ludim :)
E, sad, ja bih to nekako konvertovala... Ali nemam pojma kako da konvertujem neki objekat u "samog sebe", ali na strani klijenta, kada nicemu ne mogu da pristupim.

Dakle, na klijentu imam iste te klase. Implicitna konverzija ne dolazi u obzir (ne radi - probala), a kako da eksplicitno uradim konverziju?
Kako da uradim nesto tipa:

Klijent.Klasa obj1 = Convert.ToMojaKlasa(nizObjekata[0]);

gde nizObjekata[0] upravo treba da mi da taj objekat?

Ili mozda jos bolje - ima li neki drugi nacin za komunikaciju izmedju win aplikacije i web servisa? Ja sam ubedjena da ne treba koristiti dataset-ove za komunikaciju (ne znam ni sama zasto - kao spori su, bla bla), ali ako je ovolika komplikacija sa klasama i objektima..... pa to je da se smrznes! Kako drugacije da od servisa dobijem skup nekih podataka?
The important thing is not to stop questioning. Curiosity has its own reason for existing. - Albert Einstein
 
Odgovor na temu

Dejan Vesic
Dejan Vesic
CEO
IGT Ogranak Beograd
Beograd

Član broj: 84929
Poruke: 217
212.200.219.*

Sajt: www.vesic.org


+1 Profil

icon Re: web servisi, vracanje niza objekata i tako...29.10.2006. u 21:25 - pre 212 meseci
Web servise možeš posmatrati kao transformatore:

- pošalješ mu podatke zapakovane nekako (public svojsta neke tvoje klase, dataset, datatable)
- web service prihvati podatke, isprocesira ih i vrati rezultat u obliku prostog tipa ili klase; no, ova klasa ne vraća metode, samo polja.

Najbolje je posmatrati odgovor web servisa kao strukturu ili "glupu" klasu - set svojstava koja se mogu pročitati, bez pameti (metoda).

Odavde izlaze dva pristupa u radu sa WS-ovima:

I pristup

1. Imaš pametnu klasu
2. Napraviš "glupu" klasu koja će čuvati samo kopirane podatke iz klase (1) i koja će služiti za slanje WS-u
3. Napraviš "glupu" klasu koja će čuvati rezultat WS-a

a. Instanciraš klasu (2) i popuniš je podacima iz klase (1)
b. Pošalješ klasu (2) Web servisu, primiš nazad klasu (3) kao rezultat rada Web servisa
c. Prekopiraš podatke iz klase (3) u klasu (1)

(1) -> (2) -> WS -> (3) -> (1)

II pristup

Zasniva se na deljenju definicije klase između Web servisa i tvoje aplikacije.

1. U asembliju A je definicija tvoje pametne klase
2. Taj asembli dele Web service i tvoja aplikacija
3. Kada u tvojoj aplikaciji definišeš referencu na Web servis, dešava se sledeće:
3.1 WDSL.EXE aplikaciji se prosleđuje Web Service adresa
3.2 WDSL.EXE generiše "proxy" klasu koja opisuje parametre i sam web service
3.3 Jedna od posledica je da će WDSL.EXE izgenerisati i opis klase iz (1) koji se neće podudariti sa samom klasom, pa ćeš praktično imati dve definicije iste stvari - jednu preko reference na asembli A a drugu preko proxy klase koju je WSDL izgenerisao

Ono što ti treba da uradiš je da izbrišeš definiciju tvoje pametne klase iz proxy klase i da koristiš referencu iz asemblija A.

Ovo implicira da klasa A mora da bude serijalizabilna, inače ćeš dobijati gomile grešaka.

(nije baš trivijalna operacija ali jednom kada se izboriš, može se raditi; loša osobina je da ovo moraš raditi posle svakog osvežavanja definicije web servisa).
 
Odgovor na temu

Sandra_G
Aleksandra Glusac
Programer

Član broj: 66979
Poruke: 68
*.dialup.sezampro.yu.

ICQ: 298551171


Profil

icon Re: web servisi, vracanje niza objekata i tako...30.10.2006. u 09:59 - pre 212 meseci
OK, da vidim da li sam shvatila:

MyClass myclass = new MyClass();
myclass = webService.PopulateClass(myClass);

I dobicu popunjeni objekat, sa sve property-ima, i sa sve pristupom public metodama itd (teoretski)?

Ali zasto od komplikovanog objekta praviti nekomplikovan, pa njega prosledjivati? Mislim, sve sto u ti klasama postoji su najobicniji tipovi podataka i obicni nizovi drugih objekata?

Probacu ovo svakom slucaju, pa cemo da vidimo :)


The important thing is not to stop questioning. Curiosity has its own reason for existing. - Albert Einstein
 
Odgovor na temu

Dejan Vesic
Dejan Vesic
CEO
IGT Ogranak Beograd
Beograd

Član broj: 84929
Poruke: 217
217.26.77.*

Sajt: www.vesic.org


+1 Profil

icon Re: web servisi, vracanje niza objekata i tako...30.10.2006. u 14:31 - pre 212 meseci
Pa nije baš tako:

MyClass myclass = new MyClass();
// do Some Work Here

myInputclass = new MyInputClass();

// Copy fields from myclass to myInputclass

MyOutputClass myOutClass = webServiceProcess(myInputclass );

// Copy fields back from myOutClass to myclass.

Definicija ulaznih i izlaznih objekata na Web servisu NE SADRŽI definiciju metoda.

 
Odgovor na temu

bunker
Srđan Savković
Smederevo

Član broj: 4495
Poruke: 239
212.5.210.*



Profil

icon Re: web servisi, vracanje niza objekata i tako...31.10.2006. u 07:55 - pre 212 meseci
A da pak napravis jos jedan web metod koji cce kao parametar primati tvoj objekat i obaviti operaciju koja ti fali. Znaci umesto da zoves metod objjekta, ti pozovi web service kome prosledjujes objekat i jos parametara, ako ima potrebe. To se tako radi kad koristis servise i proxy objekte. u tome i jeste stos. Web servis koji se izvrsava na java serveru vracca objekte koji se koriste u .net klijentu. Znaci metode koje su implementirane na java strani bilo bi glupo da se preslikaju u metode .net proxy objekata. Nije ista implementacija u javi i c#.
Web servisi jesu zamisljeni da rade nezavisno od platforme, ali i jezika u kome su pisani. Ti koristis .net servrer i client, ali je client generisao svoje objekte i ne interesuje ga koji su objekti na strani servera.
Nije važno stići prvi. Važno je prvo da stigneš.
 
Odgovor na temu

Sandra_G
Aleksandra Glusac
Programer

Član broj: 66979
Poruke: 68
*.mediaworksit.net.

ICQ: 298551171


Profil

icon Re: web servisi, vracanje niza objekata i tako...31.10.2006. u 08:46 - pre 212 meseci
Hajde sad ovako... posto je i servis i klijent radjen u .net-u, da li je metodoloski ispravno, a i prakticno, slati dataset-ove? Dakle, umesto nekog niza objekata, ja posaljem klijentu dataset sa tim podacima? Tehnicki, to moze i to radi - probala sam. Razlog zbog kog pitam je sledeci: da li je to OK po pitanju performansi? Mislim, dataset je samo jedan xml fajl... Nova sam u web servisima, do sada sam radila samo win aplikacije, a nisam imala vremena da se detaljno posvetim metodologiji njihovog programiranja, pa onda postavljam ovakva pitanja.
The important thing is not to stop questioning. Curiosity has its own reason for existing. - Albert Einstein
 
Odgovor na temu

Dejan Vesic
Dejan Vesic
CEO
IGT Ogranak Beograd
Beograd

Član broj: 84929
Poruke: 217
217.26.77.*

Sajt: www.vesic.org


+1 Profil

icon Re: web servisi, vracanje niza objekata i tako...31.10.2006. u 09:16 - pre 212 meseci
Ispravno je; praktično - zavisi da li koristiš .Net 1.1 ili .Net 2.0 - stari 1.1 nije imao lepu serijalizaciju DataSet-ova, odnosno uvek je koristio XML serialiser pa je slao ogromne količine podataka.

.Net 2.0 je daleko bolji po tom pitanju.

Da bi dobila Web Servise koji su maksimalno efikasni, sledeće je potrebno:

1. Uključi HTTP kompresiju i na IIS-u i na klijentskoj strani (u proxy klasi):

http://geekswithblogs.net/evjen/archive/2006/09/13/91112.aspx

2. Upotrebi pravu serijalizaciju za DataSet:

http://msdn.microsoft.com/msdnmag/issues/04/10/CuttingEdge/

Ovo daje do 10x poboljšanje u performansama u odnosu na 1.1 - prosek je oko 6x

Ako je bolje od ovoga potrebno, onda nema druge no pisati custom serializaciju/deserijalizaciju sa kompresijom ali o tom potom.

 
Odgovor na temu

Taranto

Član broj: 67452
Poruke: 105
*.rcub.bg.ac.yu.



Profil

icon Re: web servisi, vracanje niza objekata i tako...09.12.2006. u 22:03 - pre 211 meseci
Pozdrav!

bunker imam jednu molbu...
mislim da sam te delimicno razumeo ali ne do kraja. Da li mozda mozes malo da pojasnis tvoj metod ili jos bolje da mi das neki primer u kome pozivas web servis i od njega primas neki objekat... (npr iy neke JSP strane jer mi to konkretno treba)

Unapred hvala!
 
Odgovor na temu

[es] :: .NET :: web servisi, vracanje niza objekata i tako...

[ Pregleda: 3740 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.