14. november 2003 - 13:56Der er
18 kommentarer og 1 løsning
3 projects i en solution.
Hej eksperter..
Jeg har en solution med 3 projects i. Et project der indeholder en windowsform altså en windowsapplikation. Så er der et projekt der indeholder et klassebibliotek. I denne er der en klasse: using System;
namespace Position { public class Koordinat { private static string koor;
public Koordinat() { koor = "000,000"; }
public static void setPos(string s) { koor = s; }
public static string getPos() { return koor; } } }
Det 3. project er en webservice der skal kalde getPos i ovenstående klasse.
Ideen er at noget i windowsformen opdaterer koordinatklassen en gang i sekundet og når webservidcen bliver kaldt skal den retunere det nuværende koordinat.. Men så skal webservicen og windowsformen jo snakke med samme koordinat-"object"?? og det gør den ikke?
Hvis du aldrig erklærer en ny instans af din klasse (Koordinat k = new Koordinat();) og du i din parametre til meotden altid overfører den instans af klassen, så burde det være den samme instans du jonglerer med.
Det som Benny har lavet kaldes en Singletonklasse. Den sikrer at der i dit program altid kun er een instans af klassen. Men da du både kører eet program på IIS og et på din klient vil der være 2 instanser. (desuden er benny's forslag heller ikke tråd sikker)
Hvis du vil være sikker på at det er den samme instans du jonglerer med, bør du kun instantiere een gang ENTEN på din klient ELLER på din server og så giver klassen med i kald. Hvis du alligevel vil bruge singleton, så gør den trådsikker:
Jo men hvis jeg opretter instancen i fx windowsform, kan jeg jo ikke tilgå den fra webserviceklassen.. Jeg kan jo ikke ekspotere den som dll og dermed referere til den fra webservicen?
Hvis du har din klasse i samme solution som både winformen og webservicen og har lavet en reference til projektet med klasserne fra dem begge, så er der da ingen problemer i det.
Jeg tror sgu jeg har en hæklefejl i kysen :) Altså nu har jeg gjort følgende i min winform: lavet en private klassevaribel og jeg instaniecerer også objektet her.. Jeg har lavet en metode der retunerer denne private variabel: public Koordinat sendKo() { return ko; } (og nej ikke MUUUUUHHHH!!) Nu står jeg så i min webservice klasse og vil gerne tilgå denne metode så jeg får den rigtige reference? Men jeg kan jo ikke skrive Form1.sendKo();
Altså for at forklare hvad ideen er: Programmet skal bruges til at "fake" positionering.. Jeg har i min winform en flashklient med et kort hvor jeg kan flytte en lille rød prik rundt. Denne prik giver en koordinatstring fra sig som jeg fx kan skrive i en tekstboks.. Min ide er nu at lave en webservice der kan hente denne værdien af denne string..
Ideen er så at denne webservice bliver kaldt en gang i sekundet på en klient, der dermed opdaterer prikkens position alt efter hvor jeg flytter den hen i min winform...
webservicen kan som sådan ikke hente den. det må være formen der skal sende data'en til webservicen. så kan webservicen evt returnere noget. Hvis du vil lave det så "webservicen" skal hente data fra formen så skal du nok bruge en direkte socket forbindelse, men så hedder edt ikke webservice længere.
du skrev: ---------- Min ide er nu at lave en webservice der kan hente denne værdien af denne string.. --------- og sam sagt kan du ikke kalde din form fra webservicen, men skal kalde webservicen fra formen og overføre data til webservicen.
ok.. jeg takker for hjælpen.. Har løst det ved at lade webservicen styre det hele .. dermed ingen winform, kun en webservice
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.