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

[RESENO] Najbolji nacin za slanje XML-a Web servisu?

[es] :: .NET :: [RESENO] Najbolji nacin za slanje XML-a Web servisu?

[ Pregleda: 4154 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

giger
Beograd

Član broj: 31688
Poruke: 172
*.adsl.beotel.net.



Profil

icon [RESENO] Najbolji nacin za slanje XML-a Web servisu?04.06.2007. u 10:28 - pre 205 meseci
Da li bi neko mogao malo da mi razjasni stvari koje se ticu .NET web servisa i situacije kada je potrebno sa njim razmenjivati XML podatke.

Napravio sam jedan web servis koji ce da prima typed dataset i kada u klijentskoj aplikaciji dodam web referencu na taj servis pojavi mi se taj tipski dataset tako da znam sta da posaljem web servisu.

Medjutim, hocu da web servisu saljem xml fajl koji ce da odgovara nekoj unapred zadatoj semi, a potom cu da njime punim tipski dataset koji odgovara toj istoj semi. Ako u servisu napravim neku xml semu i postavim "string xml" kao ulazni parametar, kako ce klijent da zna kakav xml treba da posalje??? Koji je uslovno najbolji nacin za slanje xml-a servisu?

[Ovu poruku je menjao giger dana 04.06.2007. u 12:28 GMT+1]

[Ovu poruku je menjao giger dana 06.06.2007. u 15:05 GMT+1]
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?04.06.2007. u 13:57 - pre 205 meseci
Probaj sledece:

1. Napravi klasu od xsd fajla
2. Postavi tu klasu kao parametar web metoda, odgovarajuci xsd ce automatski biti ukljucen u WSDL tako da ce klijent znati format
3. U telu metoda kad dobijes instancu kao ulazni parametar mozes da je serijalizujes u XMLDocument (posto je klasa nastala iz XSDa vec je XmlSerializable)
4. To upucas u dataset kako si vec planirao.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

giger
Beograd

Član broj: 31688
Poruke: 172
*.adsl.beotel.net.



Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?04.06.2007. u 15:06 - pre 205 meseci
Ok, hvala ti na odgovoru. Ako napravim klasu od xml seme i nju stavim kao ulazni parametar webmetodi, da li onda klijent moze da prosledjuje xml onako kako sam prvobitno zamisljao, tj. kao string??? Da li moze to tako ili mozda treba kao XmlDocument, XmlNode da se salje xml? Nemam pojma, ali idem da probam sad.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?04.06.2007. u 15:46 - pre 205 meseci
pa nece, morace da kreira isntancu objekta (eventualno deserijalizuje svoj XML u instancu) i da ga prosledi tvojoj metodi.

Ne postoji nacin da ti prosledis string a da sam SOAP proveri da li je string XML po toj i toj shemi. Najjednostavnije sto mozes da uradis sa stringom je da ga u web metodi ucitas kroz validating xml reader baziran na shemi koju imas i da bacis SOAPException ako xml nije odgovarajuceg formata. Ali to je onda runtime catching, ne vidim kako bi mogao compile time na osnovu WSDLa da odradis kako si zamislio
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

giger
Beograd

Član broj: 31688
Poruke: 172
*.adsl.beotel.net.



Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?04.06.2007. u 16:04 - pre 205 meseci
Hm. Ne moze da se salje string, a ni XmlDocument.

U ovom slucaju web method prima samo tu generisanu klasu kao parametar, ali opet imam i semu u okviru wsdl-a koju ne znam kako bih iskoristio u slucaju da pisem klijenta u Javi... Ono sto zelim da uradim jeste da napravim web service kome ce moci da se pristupa i iz drugih platformi. Kako ce recimo neko iz jave da pozove tu metodu? Kako ce taj klijent da napravi tu potrebnu klasu? Sta ce on da salje webmetodi? Koliko shvatam ovo je .NET klasa koja je izgenerisana, a mozda me moja pretpostavka opet j**e...
 
Odgovor na temu

giger
Beograd

Član broj: 31688
Poruke: 172
*.adsl.beotel.net.



Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?04.06.2007. u 16:09 - pre 205 meseci
Citat:

Najjednostavnije sto mozes da uradis sa stringom je da ga u web metodi ucitas kroz validating xml reader baziran na shemi koju imas i da bacis SOAPException ako xml nije odgovarajuceg formata. Ali to je onda runtime catching, ne vidim kako bi mogao compile time na osnovu WSDLa da odradis kako si zamislio


Pa tako nesto i nameravam. Znaci da napravim servis koji ce da prima string i posle radi njegovu validaciju. Ali ono sto me muci jeste kako ce klijent uopste da zna sta da posalje. OK. Sad imam semu u wsdl-u, ali mi metod ne prima string nego generisanu klasu. Da li kapiras gde se vrtim? Zelim da primam string, ali da imam u wsdl-u definisano sta primam, kako bi mogle i druge platforme da koriste moj web servis. Kako da primam string, a da i dalje imam semu u wsdl-u? Da li se to radi rucno?
 
Odgovor na temu

giger
Beograd

Član broj: 31688
Poruke: 172
*.adsl.beotel.net.



Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?04.06.2007. u 16:12 - pre 205 meseci
Uzgred (i zbog ove i prethodne teme) i da mi nista vise ne odgovoris, zasluzio si barem pice od mene, ako se nekada vidimo. :)


pozdrav
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?04.06.2007. u 17:12 - pre 205 meseci
OK, pazi ovako, to sto ti pravis klasu od XSDa i tu klasu koristis je samo "instrumentacija" koja omogucava .NETu da generise odgovarajuci WSDL sa odgovarajucom shemom. Ako je neka platforma minimum WS1.0 compliant (a mislim da postoji engine za Javu) onda ta platforma mora da moze da izvuce shemu iz WSDLa i da omoguci "pozivaru" da generise odgovarajucu strukturu/klasu/sta god, sto ce SOAP engine na toj platformi da "prepeva" u odgovarajuci SOAP paket. Ti ne mozes iz .NETa da ubacis string kao parametar zato sto .NET vec ima jak engine koji moze da radi sa objektima sto je preferirani nacin (omogucava strng type compile time checking), ali nista ne sprecava C programera na PS3 da rucno napravi SOAP Envelope i da ga postuje na web adresu web servisa :). U tome je cela lepota portabilnosti web servisa

Ono sto hocu da ti kazem je da ne moras da lomis glavu oko toga da li ce java programer da koristi XML dokument, instancu java klase ili strukturu u memoriji, dok god je SOAP paket kompatibilan sa WSDL deklaracijom i shemom u njoj, poziv ce biti uspesan.


Dodatak: U skladu sa tim, mislim da komotno mozes i sam tipizirani DataSet da stavis kao parametar metoda. DataSet sheme su koncipirane tako da budu kompatibilne sa XSDom pa nema potrebe da pravis proxy XSD za prenos iz XMLa u dataset.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?04.06.2007. u 17:28 - pre 205 meseci
OK, pogledaj ovaj link:
Apache Axis

to je SOAP1.2 compliant web services engine za javu (uz upotrebu apacha za pravljenje samih webservisa).

Narocito pogledaj deo WSDL2Java: Building stubs, skeletons, and data types from WSDL koji govori o tome kako java programeri da iskoriste XSD iz WSDL kroz java klase.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

giger
Beograd

Član broj: 31688
Poruke: 172
*.adsl.beotel.net.



Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?05.06.2007. u 22:39 - pre 205 meseci
Pozdrav,

Samo zelim da kazem da sam ti mnogo zahvalan na pomoci. Razjasnio si mi mnogo stvari... Uradio sam kako si mi prvobitno predlozio, uz malu napomenu da nije potrebno serijalizovati objekat u XmlDocument, vec moze direktno da se upuca u dataset

Code:

dsUSLUGA u = new dsUSLUGA(); //dataset
XmlSerializer ser = new XmlSerializer( ulaz.GetType() ); //"ulaz" je objekat klase dobijene iz XSD-a po kojem je dobijen i prethodni dataset
System.IO.StringWriter s = new StringWriter();
ser.Serialize(s, ulaz);
u.ReadXml( new StringReader(s.ToString()));
 
Odgovor na temu

giger
Beograd

Član broj: 31688
Poruke: 172
*.adsl.beotel.net.



Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?06.06.2007. u 11:05 - pre 205 meseci
Citat:

Dodatak: U skladu sa tim, mislim da komotno mozes i sam tipizirani DataSet da stavis kao parametar metoda. DataSet sheme su koncipirane tako da budu kompatibilne sa XSDom pa nema potrebe da pravis proxy XSD za prenos iz XMLa u dataset.


btw. DataSet seme jesu kompatibilne sa XSD-om, ali kada je tipski dataset parametar web metodi, njegova sema se ne prikazuje u wsdl-u... Ne znam na koji nacin bih je ubacio unutra.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?06.06.2007. u 12:26 - pre 205 meseci
Nesto nisi dobro uradio onda, posto to radi ok, mozda ti je podeseni WS standard SOAP1.1+ pa se shema ne vidi direktno u samom glavnom WSDLu. Ako je to slucaj onda ces imati nesto slicno ove dve linije u WSDLu:
Code:

  <s:import namespace="http://tempuri.org/DataSet1.xsd" /> 
  <s:import schemaLocation="http://localhost/WebSite003/Service.asmx?schema=DataSet1" namespace="http://tempuri.org/DataSet1.xsd" /> 


ako odes na URL iz import linka (ovde: localhost/WebSite003/Service.asmx?schema=DataSet1) dobices punu XSD shemu dataseta. To omogucava klijentima koji ne nameravaju da koriste taj tip da se ne bakcu sa ucitavanjem glomaznih dataset shema.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

giger
Beograd

Član broj: 31688
Poruke: 172
*.adsl.beotel.net.



Profil

icon Re: Najbolji nacin za slanje XML-a Web servisu?06.06.2007. u 14:02 - pre 205 meseci
Vidim, sjajno. :)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: [RESENO] Najbolji nacin za slanje XML-a Web servisu?06.06.2007. u 14:49 - pre 205 meseci
OK, samo par reci "upozorenja" na kraju.

Dataset relacije ne mogu nikako da se prezentuju u okviru XSD namespace-a http://www.w3.org/2001/XmlShema (jednostavno XSD ne podrzava relacije)

Stoga je MS implementirao relacije kao set <msdata:Relationship> tagova (xmlns:msdata="urn:schemas-microsoft-com:xml-msdata") u okviru //shema/annotation/appinfo taga sheme. Problem je sto vecina SOAP klijenata ne zna sta je gornji msdata namespace i ne "konta" relacije pa ih samim tim ne koristi. Rezultat je da je moguce na klijentu napraviti dataset koji nije referentially kontrolisan pa ce poziv web metoda puci pri deserijalizaciji iz SOAPa u instancu dataseta.

To tebi nije problem sa serverske strane jer metod nece ni biti pozvan ako dataset nije ispravan, ali klijenti moraju biti svesni tog ogranicenja.


Dodatak: Ako relacije deklarises kao "nested" onda nemas gornji problem jer ce child tabela biti definisana kao element master tabele u XMLu pa XSD to podrzava, medjutim ne mogu se sve relacije napraviti da budu nested (npr ako tebela C ima foreign key na dve master tabele A i B ne mogu obe relacije biti nested jer bi se onda duplicirali redovi iz C, jednom u okviru A pa onda u okviru B sto bi pri deserijalizaciji tabele C dovelo do pucanja primary kljuca).


[Ovu poruku je menjao mmix dana 06.06.2007. u 20:37 GMT+1]

[Ovu poruku je menjao mmix dana 06.06.2007. u 20:38 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

giger
Beograd

Član broj: 31688
Poruke: 172
*.adsl.beotel.net.



Profil

icon Re: [RESENO] Najbolji nacin za slanje XML-a Web servisu?06.06.2007. u 22:16 - pre 205 meseci
Malo sam trazio. A <xs:keyref>??? Kako ovde pise potpuno je podrzan od strane XSD-a i potpuno ekvivalentan tagu <msdata:Relationship>...





The XSD keyref Element

In XSD, the keyref element allows you to establish links between elements within a document in much the same way a parent/child relationship does. The WriteXml method uses keyref to express a relation within a DataSet object, as shown here:

<xs:keyref name="Emp2Terr" refer="Constraint1">
<xs:selector xpath=".//Territories" />
<xs:field xpath="@employeeid" />
</xs:keyref>

The name attribute is set to the name of the DataRelation object. By design, the refer attribute points to the name of a key or unique element defined in the same schema. For a DataRelation object, refer points to an automatically generated unique element that represents the parent table, as shown in the following code. The child table of a DataRelation object, on the other hand, is represented by the contents of the keyref element.

<xs:unique name="Constraint1">
<xs:selector xpath=".//Employees" />
<xs:field xpath="employeeid" />
</xs:unique>

The keyref element’s contents consist of two mandatory subelements—selector and field—both of which contain an XPath expression. The selector subelement specifies the node-set across which the values selected by the expression in field must be unique. Put more simply, selector denotes the parent or the child table, and field indicates the parent or the child column. The final XML representation of our sample DataRelation object is shown here:

<xs:unique name="Constraint1">
<xs:selector xpath=".//Employees" />
<xs:field xpath="employeeid" />
</xs:unique>
<xs:keyref name="Emp2Terr" refer="Constraint1">
<xs:selector xpath=".//Territories" />
<xs:field xpath="@employeeid" />
</xs:keyref>

This code is functionally equivalent to the msdata:Relationship annotation, but it is completely expressed using the XSD syntax.
------------------------------------------------------------------------------

http://www.perfectxml.com/XMLSerialize.asp
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: [RESENO] Najbolji nacin za slanje XML-a Web servisu?07.06.2007. u 00:44 - pre 205 meseci
Sad kad si to pomenuo, secam se da je .NET 1.1 generisao sheme sa <xs:keyref>, skroz sam na to zaboravio. Sve je to skroz nedokumentovano, i posle malo igranja otkrio sam sledece:

Relaciju prebaci u "Both Relation and Foreign Key Constraint" ili "Foreign key Constraint Only". U oba slucaja ce generisati <xs:keyref>. Naravno dodace msdata:* atribute za rules, ali to ti i nije toliko vazno za validaciju i object mapping na klijentu. <msdata:Relationship> ce se pojaviti samo ako je "Relation only" mod.





Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: [RESENO] Najbolji nacin za slanje XML-a Web servisu?07.06.2007. u 14:32 - pre 205 meseci
konsultovao sam se sa ortakom koji trosi Javu malo vise od mene (u stvari mnogo vise od mene ). Iskreno ne mogu da potvrdim da li je tacno ili ne, ali ako pomaze evo citat nemusto preveden sa engleskog:

"Situacija je sledeca, ako ti je shema u WSDLu XSD kompatibilna (a sa keyref jeste) treba da objasnis Java klijentima da koriste Axis2 library (http://ws.apache.org/axis2/index.html), ne stari Axis. Postoji nekoliko nacina da se implementira XSD iz WSDLa, najcesce preko ADB ili XMLBeans, u zavisnosti od kompleksnosti sheme, u oba slucaja ce moci da primene deklarisani referential integrity nad .NET datasetovima iz same Jave. Nazalost msdata:Relationship je nepodrzan i ne verujem da ce ikad biti"


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: [RESENO] Najbolji nacin za slanje XML-a Web servisu?

[ Pregleda: 4154 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

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