webForumDet fria alternativet

webservice win application

21 svar · 584 visningar · startad av turbofreddan

turbofreddanMedlem sedan apr. 2003115 inlägg
#1

Någon som har erfarenhet av win application och webservice. Har en win application som är server för hårdvara.

Vill ansluta en webservice till min application där klienterna som ansluter till webservicen har tillgång till logik som finns i win applikationen. Vilken koppling ska finnas mellan webservicen och windows applikationen. För att webservicen ska kunna begära information av windows applikationen. (Det är alltså inte frågan om att logiken finns i webservicen och windows programmet är en s.k. "consumer".)

clarkbonesMedlem sedan feb. 20013 023 inlägg
#2

Jag tror det är fler än jag som inte riktigt förstår vad du menar. Ta allt från början. Vad är det som skall ansluta till vad?

NickemannenMedlem sedan aug. 20003 575 inlägg
#3

Ja det är lite luddigt.

Vad jag fattar det som så har han en Windows Applikation som redan är implementerad om det är i .NET eller något att språk får jag inte ut.

Men vad jag fattat det som vill han få en webservice och den här implementationen att prata med varandra.

Om det är en .NET applikation och du har källkoden kanske du kan integrera en webservice med applikationen.

Eller så får du med hjälp av någon pipeline mellan applikationen och webservicen kommunicera.

turbofreddanMedlem sedan apr. 2003115 inlägg
#4

Ja självklart är det i .net, är i de forumet nu! :h
Hur implementerar jag webservicen i min befintliga applikation? Jag skulle nog behöva alternativet med pipeline;en, vilken metod föreslås? .net remoting mellan webservicen och min .net applikation?

Grejen är ju den att man från en klient till webservicen ska kunna kalla på metoder som finns i den befintliga .net win form applikationen.

NickemannenMedlem sedan aug. 20003 575 inlägg
#5

Med pipelining kan du ju kommunicera mellan socket's eller en fil som kanske är xml formaterad. Eller varför inte säga att Applikationen också är en klient till webservicen. Som då kollar lite då och då om den har fått något den skall utföra.

turbofreddanMedlem sedan apr. 2003115 inlägg
#6

Applikationen är mycket tidskritisk, Man kan inte ligga o kolla hela tiden.

Klienterna ska kunna skicka upp information till Applikationen som kommer applikationen tillhanda direkt!

NickemannenMedlem sedan aug. 20003 575 inlägg
#7

Men kan du inte baka ihop webservicen med applikationen.

turbofreddanMedlem sedan apr. 2003115 inlägg
#8

Varför jag vill ha en webservice, är att det blir så enkelt för kunder att bygga sin egen hemsida med data från applikationen.

turbofreddanMedlem sedan apr. 2003115 inlägg
#9

Kan man baka ihop webservicen i en Win Form .net applikation???

NickemannenMedlem sedan aug. 20003 575 inlägg
#10

Du kan ju göra så att allt är en webservice och ditt Win Form är en klient till webservicen också.

turbofreddanMedlem sedan apr. 2003115 inlägg
#11

Kan inte göra så, eftersom logiken ligger i win form applikationen. Att använda en asynkron koppling mellan websevicen och programmet skulle funka, men det blir timeout efter längre tid.

GladhMedlem sedan maj 20012 812 inlägg
#12

Frågan är hur din WinApplikation är uppbyggd?

Är den korrekt uppbyggd i flerskiktslösning så är det inget problem eftersom då innehåller inte din WebForm någon logik utan endast presenterar information som du får från underliggande komponenter, så fall skapar du bara en webservice och refererar till dessa komponenter och kör på. Nu när du vet hur du skall bygga din Win Applikation nästa gång så kanske du vill ha en lösning på ditt problem.

- Ditt första problem blir att du alltid måste kunna garanterar att din winapplikation kör eftersom du är beroende av den, och det kan du inte så som en winapplikation är uppbyggd.

- Ditt andra problem blir som sagt kommunikationen mellan WinApplikation och Webservicen, har du möjlighet att bygga in logik i winApplikationen så skulle du kunna fixa det med hjälp av .NET Remoting. Du låter då din WinApplikation fungerar som server och din webservice som en klient och kopplar upp sig mot WinApplikation och kallar på de methoder som du ställer ut via ett Interface.
En annan lösning som jag aldrig har testat men har för mig att jag sett exempel på. Eftersom din WinApplikation bara är en klass så borde du kunna skapa en instans av denna klass i din webservice och sedan anropa alla publika methoder i denna klass.

Mitt förslag är dock att du tittar över din aritektur av din WinApplikation och ser om du kan dela upp den så att din WebForm endast är ett presentationsskikt och inte innehåller någon som helst logik, så fall blir det ju enkelt.

- M

turbofreddanMedlem sedan apr. 2003115 inlägg
#13

Gladh, tack nu börjar det likna något. För tillfället har jag löst det precis som du förklarar med .net remoting mellan webservicen och min win applikation. (Var bara tvungen att fråga så att den lösningen är ok). Applikationen är uppbyggd på skickt sättet.
Alternativet nr ett som du förklarar där är mycket bra. Du menar att webservicen skulle kunna gå av sig själv utan win form applikationen då? Grejen är den att man ska kunna göra inställningar i win form applikationen som ska beröra vad som går att få av webservicen. (Annars hade det inte varit några konstigheter, allt kunde ha legat i webservicen)

Tror att lösningen med .net remoting är den jag ska ha då, eftersom jag gjort så ocskå, har bara inte sett någon som gjort liknande o blandat de två teknikerna på webben.

GladhMedlem sedan maj 20012 812 inlägg
#14

Du menar att webservicen skulle kunna gå av sig själv utan win form applikationen då?

Om vi för enkelhetens skull delar upp din winapplikation i 3 lager.

1. Presentationslagret
2. Affärslogiklagret
3. Datalagert.

Om du delar upp din applikation så här och verkligen inte har någon logik i presentationslagret så skall du (iprincip) bara kunna lyfta bort WinFormen och lägga ditt en WebForm istället, eller för den delen en WebService. Så länge du bara presenterar data i ditt presentationslager så spelar det ingen roll vad lagret är skrivet i, det är ju bara anrop ner till ditt affärslogik lager och där gör du allt.

Säg så här. Du vill kunna hämta en kund och presenterar hans uppgifter i din WinApplikation.

Det du gör du är att du i ditt affärslogik lager skapar en metod som tar emot typ ett Personnummer och sedan returner ett kundobjekt (eller ett kundentity) tillbaka.

public Customer GetCustomer(decimal number){}

om du sedan anropar denna kod från en winapplikation eller en webform eller en webservice är helt ointressant och inget som ditt affärslogik skall verken brysig om eller ens veta.

Så om du gör så så behövs inte WinApplickation vara igång på servern eftersom du då bara lägger referenser till ditt affärslogiks dller i från din webservice.

Grejen är den att man ska kunna göra inställningar i win form applikationen som ska beröra vad som går att få av webservicen. (Annars hade det inte varit några konstigheter, allt kunde ha legat i webservicen)

Nu är du inne på något helt annat, det du vill ha här är någon typ av säkerhet eller kompetens kontrol. Alltså typ om jag är inloggad via min WinApplication så skall jag få göra detta och detta, medans om jag kommer från webservicen så skall jag bara få göra detta och detta.

Den enklaste lösningen är helt enkelt att du inte visar utställer de metoder i din webservice som man inte får använda från webservicen. Om vi går tillbaka till vår GetCustomer() metod så säger vi att det får man bara göra från winapplikationen. Så fall har du en knapp på din WinForm där det står 'Hämta kunduppgifter' och när man trycker på knappen så kallar du på metoden. Din Webservice fungerar på liknande sätt, om du vill att man skall kunna hämta kunduppgifter via en webservice så måste du utställa den funktionallitetn i din webservice, så om du inte vill att man skall kunna göra det, så skriver du helt enkelt inte någon method i din webservice som kallar på metoden GetCustomer() i affärslogikslagret.

Det gör då att du inte behöver ställa in i din WinApplikation vad som får och inte får hämtas från webservicen, eftersom du redan i koden till din webservice har bestämt vad som får göras och inte göras.

- M

turbofreddanMedlem sedan apr. 2003115 inlägg
#15

Jag förstår. Grejen är den att jag vill att min win form (Master program) ska vara igång jämt. Då är väl alternativet med en .net remoting "pipeline" mellan webservicen och (master programmet) en bra lösning?? Så slipper dels den dator där masterprogrammet körs ha IIS installerat.

GladhMedlem sedan maj 20012 812 inlägg
#16

Grejen är den att jag vill att min win form (Master program) ska vara igång jämt.

Det är en dålig lösningen eftersom du inte kan garantera att ditt program är igång jämt. Vad händer om en fel inträffar i programet så att det kraschar, då har du ju förstört möjligheten att använda din webservices.

Men visst vill du ha den lösningen så är .NET Remoting vägen att gå, men det är en otroligt omständig och onödig väg att gå för att bygga en applikation, men det kommer du säkert komma på senare. Lycka till!

- M

turbofreddanMedlem sedan apr. 2003115 inlägg
#17

Ok, vilka andra alternativ finns de, om jag inte ska använda webservice? Så att användare enkelt kan få tillgång till metoder i programmet som ska vara tillgängliga utåt. Jag vill ha mitt (master) program till o snurra hela tiden. helt vill jag slippa IISen, vad finns de för alternativ med att bygga in en server?

För att lösa problemet med att man inte vet om programmet är igång jämt, får väl lösas med någon form av timeout? Vad händer om du har en databas kopplad till din webservices? hur kan du garantera att databasen alltid snurrar?

GladhMedlem sedan maj 20012 812 inlägg
#18

Ok, vilka andra alternativ finns de, om jag inte ska använda webservice? Så att användare enkelt kan få tillgång till metoder i programmet som ska vara tillgängliga utåt. Jag vill ha mitt (master) program till o snurra hela tiden. helt vill jag slippa IISen, vad finns de för alternativ med att bygga in en server?

Inget vettigt alternativ än, när indgo kommer så kan du använda det direkt i din WinApplication och anropa med hjälp av WebService direkt till din winapplikation.

För att lösa problemet med att man inte vet om programmet är igång jämt, får väl lösas med någon form av timeout? Vad händer om du har en databas kopplad till din webservices? hur kan du garantera att databasen alltid snurrar?

Du kan inte garantera att en databas alltid är tillgänglig, den är dock programmerad utifrån det senariot att flera olika användare skall anropa den och har en vettig felhantering om något går fel.

Jag är rätt övertygad att din winapplikation inte är kodad att hanterar multipla samtidag anrop mot den samtidigt som någon gör något via UI. Jag tror inte heller att din felhantering är så bra så den aldrig går ner om något fel händer i en tråd.

- M

turbofreddanMedlem sedan apr. 2003115 inlägg
#19

Några frågor till innan jag ger mig ;D

Vilken metod används för att hämta data från andra datorer inom "webservice boundaryn" då? Är det detta som Indigo fixar till??

.net framework 2.0 ska klara av att hosta en webserver, klarar den även av att köra en webservice i vilken applikation som helst utan IIS?

GladhMedlem sedan maj 20012 812 inlägg
#20

Vilken metod används för att hämta data från andra datorer inom "webservice boundaryn" då? Är det detta som Indigo fixar till??

Förstår inte din fråga riktigt???

.net framework 2.0 ska klara av att hosta en webserver, klarar den även av att köra en webservice i vilken applikation som helst utan IIS?

Det är det som Indigo fixar till dig.

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)