UweMedlem sedan nov. 2003181 inlägg Eftersom stödet för xml i .net är så pass utvecklat behöver jag lite tips på vilket bästa sättet för att lösa uppgiften.
Jag hade tänkt att klienten ska kunna skicka en querystring till en sidan, hämta ut data efter denna querystring och skicka tillbaka en xml-fil över resultatet. Jag vill kunna styra hur xml-filen ska se ut i detalj.
Är bästa sättet att sätta upp en web-services eller är det lättare att göra det i ett vanligt webform?
//Uwe
GladhMedlem sedan maj 20012 812 inlägg Varför vill du ha det just som en xml-fil. Mitt förslag på lösning är att du skapar en klass/array av klassen med just den informationen du behöver och så returnerer en webservice denna klass.
Nu kan du enkelt från vilket annat språk (som stödjer webservice) använda dig av resultatet i form av ett objekt. Alltså så har du en bra objektorienterade programmerings modell att utgå ifrån.
- Magnus
UweMedlem sedan nov. 2003181 inlägg
Gladh skrev:
Varför vill du ha det just som en xml-fil. Mitt förslag på lösning är att du skapar en klass/array av klassen med just den informationen du behöver och så returnerer en webservice denna klass.
Nu kan du enkelt från vilket annat språk (som stödjer webservice) använda dig av resultatet i form av ett objekt. Alltså så har du en bra objektorienterade programmerings modell att utgå ifrån.
- Magnus
Låter hur intressant som helst! Har du möjlighet att utveckla lite eller finns det några länkar? Jag behöver nog lite mer info om jag ska förstå helheten. :OO
Mc FettoMedlem sedan nov. 20022 355 inlägg en länk: kanske inte den bästa men den tar upp ett enkelt hello world exempel med hjälp av web services: http://www.oreilly.com/catalog/prognetws/chapter/ch02.html
finns hur mycket tutorials och intressant information på google inom ämnet :)
UweMedlem sedan nov. 2003181 inlägg Det som jag inte riktigt greppar är hur det går att returnera själva klassen i sin webservice, har även svårt att finna info kring det :q. Googlandet har ännu inte gett något bra resultat där :o
//Uwe
GladhMedlem sedan maj 20012 812 inlägg Det är inte svårt att returnera klassen, du har bara klassen som returvärde från din webservice metod, istället för string eller int som de flesta exempel har.
[WebMethod()]
public Customer GetCustomer()
{
Customer customer = new Cutomer();
customer.FirstName = "Magnus";
customer.LastName = "Gladh";
customer.OtherInfo = "Simple isn't it....";
return customer;
}
Sedan så kan du använda dig av objektet customer i den applikation som kallar på webservicen.
- Magnus
UweMedlem sedan nov. 2003181 inlägg
Gladh skrev:
Det är inte svårt att returnera klassen, du har bara klassen som returvärde från din webservice metod, istället för string eller int som de flesta exempel har.
[WebMethod()]
public Customer GetCustomer()
{
Customer customer = new Cutomer();
customer.FirstName = "Magnus";
customer.LastName = "Gladh";
customer.OtherInfo = "Simple isn't it....";
return customer;
}
Sedan så kan du använda dig av objektet customer i den applikation som kallar på webservicen.
- Magnus
Funkar klockrent, men går det att loopa ut en array av Customer om jag vill skicka många instanser av Customer som svar i webservicen?
lucgo446Medlem sedan aug. 2002221 inlägg Ja, det går alldeles utmärkt. använd dig av ArrayList och adda alla Customers du vill returnera.
UweMedlem sedan nov. 2003181 inlägg Nu börjar det likna något som var meningen från början... men varför går det inte att anropa sin webservices via querystring. Som det är nu blir det helt oanvändbart.
lucgo446Medlem sedan aug. 2002221 inlägg lägg in följande i machine.config
<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="Documentation"/>
<add name="HttpPostLocalhost"/>
</protocols>
</webServices>
Den där bill gates kan hjälpa dig:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconconfigurationoptionsforaspnetwebservices.asp
GladhMedlem sedan maj 20012 812 inlägg
Ja, det går alldeles utmärkt. använd dig av ArrayList och adda alla Customers du vill returnera.
Du skall inte använda dig av något som är .NET specifikt, typ en arrayList. Du skall bara göra en vanlig array av dina objekt.
[WebMethod()]
public Customer[] GetCustomer()
{
...
}
Eftersom du då gör det möjligt för andra språk att implementera din webservice på ett enkelt sätt. Det är dock möjligt att ArrayListen faktiskt returnerar en array av din objekt det har jag inte kontrollerat :)
- M
UweMedlem sedan nov. 2003181 inlägg Tack Gladh och lucgo446, nu börjar vissa bitar falla på plats. Eftesom detta är min försat webservices så ber jag om lite tålamod ;) .
Nu har jag gjort en lösning som ser ut som Gladhs förslag där jag skapar en klass som sedan returneras. Problemet är att få till många nivåer och att styra namnen på taggarna. Det jag vill uppnå är ungefär så här:
<start>
<attr1>Text</attr1>
<attr2>
<id>ID</id>
<values>
<value1>val</value1>
<value2>val</value2>
<value3>val</value3>
<value4>val</value4>
</values>
<values>
<value1>val</value1>
<value2>val</value2>
<value3>val</value3>
<value4>val</value4>
</values>
</attr2>
<attr1>Text</attr1>
<attr2>
osv...
</start>
/Uwe
GladhMedlem sedan maj 20012 812 inlägg
Nu har jag gjort en lösning som ser ut som Gladhs förslag där jag skapar en klass som sedan returneras. Problemet är att få till många nivåer och att styra namnen på taggarna. Det jag vill uppnå är ungefär så här:
Glöm bort din XML-struktur och tänk på klasser och arrayer istället. Samt att det är lättare att förstå om du skriver ut vad det är istället för tagar som attr1, attr2 osv osv
Det ser ut som att du behöver följande:
Klass: Start
Klass: Attr2
Klass: Values
Klassen Start skall kunna ha en array av klassen Attr2 samt en variable attr1 som är av typen string.
Klassen Attr2 skall kunna ha en array av klassen Value samt en variable Id som är av typen integer (gissar jag).
KlassenValues skall ha en variable av type string.
Typ så här:
public class Start{
public string myAttr1;
public Attr2[] myAttr2;
}
public class Attr2{
public integer myID;
public Values[] myValues;
}
public class Values{
public string myValue;
}
Jag ser att du har två Values i ditt attr2 det förstår jag inte riktigt meningen med, men som sagt om du säger vad det är du vill ha så är det betydligt enklare att hjälpa dig än att hitta på konstiga och krystade XML-strukturer.
- M
UweMedlem sedan nov. 2003181 inlägg
Jag ser att du har två Values i ditt attr2 det förstår jag inte riktigt meningen med, men som sagt om du säger vad det är du vill ha så är det betydligt enklare att hjälpa dig än att hitta på konstiga och krystade XML-strukturer.
Anledningen till den krystade strukturen är att jag fortfarande sitter och filar på hur jag vill ha det, men jag vill vara begränsad av mina kunskaper för att göra en schysst lösning.
Men som du visar så är lösningen nog att skapa en ny klass för varje nivå och lägga dessa in en arrry, som i sin tur innehåller objekt av en ny klass. Jag markera som löst så länge, kanske får ta upp tråden igen framöver.
Kan säga att lösningen kommer att bli ganska långt ifrån vad jag hade tänkt från början, men bara till det bättre! :)
/Uwe