Gå til innhold

Smartest måte å kommunisere med server på


Anbefalte innlegg

Heisann!

 

Jeg arbeider for tiden med et større program som har behov for å hente og laste opp informasjon til en server. Det som skal hentes er:

a) Lister over brukere med passord, slik at jeg kan sjekke om brukeren er på brukerlisten og eventuelt kontrollere at det er riktig passord

b) Informasjon om hvilke filer som skal lastes ned til denne brukeren

c) Filer brukeren trenger

 

Og følgende skal lastes opp:

a) Filer fra brukeren til spesielle mapper for denne brukeren

b) XML-filer med varierende størrelse (vil anta at normal størrelse er 5-100kb)

c) Nye versjoner av filen omtalt i første b), som nå inneholder andre filer enn før

 

Det er altså kun filer som skal sendes til og fra serveren.

 

Men det forekommer meg at dette er en utrygg måte å gjøre det på. For det første kan hvem som helst nå feks bruke Reflector og lese ut all tilkoblingsinformasjon for FTP-serveren og dermed stikke innom og gjøre hva han vil.

 

Jeg regner også med det er diverse måter å snappe opp filene, feks de med brukernavn og passord til alle brukerne, når programmet mitt laster dem ned for å sammenligne.

 

Hva jeg lurer på:

Jeg vet det finnes greier somn kan installeres på serveren slik at den kan kjøre noe som er laget i Visual Studio, forhåpentligvis VB .Net siden det er det jeg kan, og som på denne måten skal kunne kommunisere mye mer direkte med programmet mitt, slik at jeg i stedet for å laste ned brukerlister og sammenligne bare sender påloggingsdataene til serveren, og så foretar den sammenligningen, og jeg håper også å kunne sende større mengder med data (omtalte XML-filer på 5-100kb) til og fra server. På den måten kan ingen snappe opp påloggingsinformasjonen uten å komme inn på serveren, og det vil jo også være vanskelig, siden jeg heller ikke trenger lagre FTP-informasjon i programmet.

 

Tar jeg helt feil, eller er det noe slikt? Jeg mener å ha lest om det, men aner ikke hvordan jeg skal finne ut av hva jeg mener, siden jeg ikke vet hva det heter.

 

Regner med det er et veldig enkelt spørsmål for dem som vet det (har en anelse om at "Manfred" bruker denne greia).

 

Takk,

Degeim

Lenke til kommentar
Videoannonse
Annonse

Heisann,

 

Jeg så navnet mitt være nevnt :)

 

Det du kan lage på serveren din er jo en vanlig standard "form" som kan ta imot filer. via en vanlig HTTP POST (på samme måte som om du skulle hatt en filopplastings-sak i et skjema.

 

For å laste opp fra programmet bruker du da System.Net.WebClient.UploadData("http://minadresse", "POST", minData); hvor "minData" er en byte array inneholdende dine data.

 

Noe slikt du tenkte på?

Lenke til kommentar
Rart ingen har nevnt webservices... Det er jo det som er hot og trendy og moderne og tøft og bra for tiden :)

8471874[/snapback]

 

Er det egen API du har laget i posten jeg linket til?

 

Hva gjør jeg i så fall for å få den til å kommuniser med en webserver?

 

Er det enkelt og greit bare en privat server med kjørende program som kommuniserer via Winsock eller lignende med programmet ditt?

Lenke til kommentar

Webservices kan du enkelt lage med .Net. Det er egentlig vanlige websider men du lager funksjoner som kan bli kjørt av klienten. Webservices kjører som en vanlig webapplikasjon i IIS.

 

http://www.google.no/search?q=webservices+...lient=firefox-a

 

 

"API" et følger med .Net rammeverket. Webservices er en standard. Slik at webservice'n du lager kan brukes av andre om du ønsker det. Kan enkelt implementeres i .Net og Java, mens andre språk gjerne har tredjeparts bilioteker for å bruke webservices.

Lenke til kommentar

Jeg er enig om at Web services er elendig når det kommer til performance. Alt for mye overhead, men er ikke alltid dette er et problem. Kommer jo an på hva du skal bruke de til.

 

Alternativt kan du jo skru på HTTP POST og GET støtte i config fila. Ulempen med POST og GET er at den ikke støtter annet en helt enkle variabel typer som string, int, long etc.

 

Et annet alternativ er å se på XML-RPC (http://www.xmlrpc.com) som er litt mer "lightweight".

 

Er det noe jeg ikke kan fordra er det å integrere mot firmaer som benytter seg av egendefinerte APIer, som ikke har noen konsekvent måte å håndtere f.eks en feilmelding på. Ofte mangler det også på oppdatert dokumentasjon og endringer kommer fortløpende som bryter med ting de har sagt tidligere.

Lenke til kommentar

Man kan også bruke WebDAV, PUT, webservice attachments og andre standard måter å overføre filer på.

 

Inntil man trenger ekstrem ytelse, så er det å gjøre ting i forhold til standarder som det finnes ferdige API for å bruke det beste og enkleste.

 

 

(Liten fotnote: Jeg er ganske enig med posteren over som irriterer seg over egenrullede API-er. Det mest ekstreme eksempelet jeg har vært borte i var en server som skulle ta i mot EDIFACT-meldinger via en C-applikasjon på en IBM-boks.

 

Programmereren som var ansvarlig for API-et var nå på fottur i India (de to siste årene) og det eneste som var av dokumentasjon var en kopi av en fax-melding.

 

Tjenesten døde selvsagt hvis en sendte noe feil, og måtte da drepes og restartes.)

Endret av Bigbagaroo
Lenke til kommentar

Jeg har funnet ut at jeg - i alle fall foreløbig - vil beholde FTP-delen av programmet for overføring av filer, men vil ikke lagre FTP-informasjonen i programmet.

 

Derfor tenker jeg å lage en PHP-løsning, der jeg i form av en POST sender brukernavnet og passordet til den som prøver å logge seg på til PHP-filen min, lar filen sammenligne med lister den har, og eventuelt spytte ut FTP-informasjonen som programmet da kan lese av.

 

Er dette en nogenlunde sikker måte å gjøre det på, eller er den som en sveitsisk ost?

 

 

Takk,

Degeim

Lenke til kommentar

Ok, det var litt verre i praksis enn i teorien.

 

EDIT: Jeg fikk det til (tatt rett ut av MSDN)!

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim uriString As String = "http://adresse/fil.php" 

       ' Create a new WebClient instance.
       Dim myWebClient As New System.Net.WebClient()
       Dim postData As String = "datasomskalsendes"
       myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded")

       ' Apply ASCII Encoding to obtain the string as a byte array.
       Dim byteArray As Byte() = System.Text.Encoding.ASCII.GetBytes(postData)

       ' Upload the input string using the HTTP 1.0 POST method.
       Dim responseArray As Byte() = myWebClient.UploadData(uriString, "POST", byteArray)

       ' Decode and display the response.
       MsgBox(System.Text.Encoding.ASCII.GetString(responseArray))
   End Sub

 

Takk,

Degeim

Endret av Degeim
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...