19. oktober 2003 - 21:46Der er
23 kommentarer og 1 løsning
Webservice i traditionel model/view/controller implementering
Hej..
Jeg har lavet et lille program med en Model/view/controller implementering.. Model delen skriver indholdet af et array til en fil.. og jeg har en datahandler klasser der fungerer som den controller som GUI bruger til at kontakte model-delen
Nu vil jeg lave en webservice der skal kunne læse indholdet af denne fil.. så jeg har lavet en webservice der opretter et dataHandler objekt, og kalder dens toString metode.. Jeg har tjekket i GUI at denne retunerer den rigtige string, men når jeg kalder denne funktion på webservicen retunerer den bare en tom string?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Som du kan se har jeg udkommenteret en linje i toString metoden. hvis jeg bruger den udkommenterede return statement retunere webservicen godt nok "Datahandler OK"... bruger jeg beh.tosString() retunere webservicen ingenting men mit GUI retunere den rigtigt string.. Fatter det ikke :)
det ser ud til at koden du har her ikke fejler noget. Er du sikker på at der ligger noget i din beholdningsklasse når du kalder HentBeholdning()? (WS er jo stateless som default)
Fejlen kunne også ligge i din beholdningsklasse i sig selv.
Altså programmet kører uden problemer når jeg kører det gennem min GUI klasse.. webservicen er bare tænkt som en plug-in.. j jeg er ikke med på hvad du mener med at WS er stateless?
Stateless betyder at den ikke gemmer state på objekter mellem 2 webservice kald. Dette skal du selv sørge for at gøre ved brug af fx Session. Dvs at hvis du bruger eet kald til at fylde noget i din beholdningsklasse (og ikke gemmer i session) og du så bruger et andet kald til at hente data fra din beholdningsklasse, så er det 2 forskellige instanser af beholdningsklassen og dermed er den også tom (hvorfor du får en tom string tilbage).
Men nu kan jeg jo ikke se hvad din beholdningsklasse laver, så det er kun et skud på hvad det kan være...
Beholdningklasse: using System; using System.Collections; using Model; using System.Runtime.Serialization.Formatters.Binary; using System.IO;
namespace Model { /// <summary> /// Denne klasse indeholder alle Ingrediens objekter /// </summary> ///
public class Beholdning{
private ArrayList beh; public Beholdning(){ beh = new ArrayList(); }
public void tilføjTilBeholdning(Ingrediens i){ beh.Add(i); }
public Ingrediens hentFørsteIng(){ Ingrediens ing = (Ingrediens) beh[0]; return ing; }
public Ingrediens hentIngrediens(int i){ beh.TrimToSize(); Ingrediens ing = (Ingrediens) beh[i]; return ing; }
public void sletIngrediens(int i){ beh.RemoveAt(i); beh.TrimToSize(); }
public void sletIngrediens(string plut) { Ingrediens it = new Ingrediens(); foreach(Ingrediens i in beh) { if(plut == i.toString()) { it = i; } } sletIngrediens(it); }
public void sletIngrediens(Ingrediens ig) { beh.Remove(ig); }
Hver gang jeg laver en instans af datahandler laver den jo en instans af Beholdning og kører hentFil.. Den åbner en fil og henter indholdet: Men måske er det denne fil den ikke kan finde? skal den ligge sammen med Service1?
Jeg har lige prøvet at skrive den absolutte sti.. men stadig uden held.. Jo det er jo faktisk ikke særlig effektivt.. Man burde vel bare gemme hver gang systemet lukker?? Jeg kan evt maile hele min solution til dig.. Jeg er ny i feltet, og dette er mit første spæde forsøg på et program og jeg sidder lidt fast :)
Hvis der er et "normalt" 90%-10% mellem read & write kunne du forbedre performance ved at have den permanent i memory men alligevel skriv den til disk ved hver update.
Jeg har ikke erfaring med Web Service si .NET, så jeg er nok ikke den rette person at pusse på opgaven.
hvis DeSerialize ikke kunne finde filen, så ville den kaste en exception, Så det kan ikke være problemet. Jeg har et opar ideer til noget du kan prøve:
Prøv at sætte et breakpoint i din kode når du henter filen og se om der rent faktisk er noget i array'et.
prøv at ændre denne:
[WebMethod] public string HentBeholdning() { dt = new dataHandler(); return dt.toString(); //return "ÆØÅ Dette er en test"; }
Hmm har også prøvet ovenstående.. Stadig ingen held.. Jeg tænkte om du (finger) måske var interesseret i at se hele min solution, jeg er villig til at sætte flere point på højkant :)
kanon.. min solution ligger på min notebook, så jeg kan maile det når jeg kommer hjem?? Min mailadresse er thomasbonielsen@hotmail.com.. kan evt kontaktes på messenger?
Thomaslp <-- har jeg også prøvet.. stadig ingen held.. finger jeg fik dig aldrig addet til min messenger så nu har jeg ikke din mail-adresse :) kan du kontakte mig på messenger igen?
Måske skal vi lige nævne at det var fordi der manglede en FileAcces.Read Stream stream = File.Open("outfile.dat", FileMode.Open); Takker for hjælpen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.