Avatar billede Slettet bruger
11. marts 2005 - 08:34 Der er 10 kommentarer og
1 løsning

Sende store objekter eller filer over internettet

Hej eksperter

Jeg er ved at lave et klient/server program som via Remoting skal sende et stort objekt over internettet. Der er tale om nogle data fra en database, som kan løbe op i en vis datamængde.

Jeg sidder egentlig ikke fast som såddan, men jeg vil meget gerne høre om der findes nogle specielle klasser/metoder i C# remoting, som jeg bør kigge mere på specielt til dette formål?

Det der bekymrer mig mest er, at hvis jeg sender alle mine data pakket i et stort objekt, så "fryser" min tråd jo mens jeg sender. Jeg vil gerne have mulighed for at give brugeren besked om status under dataoverførslen ved hjælp af en progressbar.

Indtil videre er planen at skrive noget kode selv til at dele mine data op i mindre stykker, for derved at opdatere en progressbar mellem de enkelte afsendelser. Men jeg ville som sagt høre om nogen kender til en smartere måde at sende store datamængder i Remoting.

Jeg skal som nævnt beslutte om jeg vil sende data som en stor "klump" eller om jeg vil dele den op. Jeg kan se problemer ved begge metoder:

En stor "klump": Jeg frygter at jeg "overbelaster" internetforbindelsen + jeg ser ikke de store muligheder for fejlkontrol under afsendelsen.

Opdelt i små dele - her er jeg bange for, at jeg kommer til at forårsage uforholdsvis meget netværkstrafik, da der vel skal oprettes og nedlægges en ny forbindelse for hver del der sendes. (jeg kalder jo en remote metode hver gang jeg sender en lille del).

Jeg har ikke arbejdet det store med remoting før - derfor disse spørgsmål. Håber nogen kan kaste lidt lys på sagen for en nybegynder :)
Avatar billede arne_v Ekspert
11. marts 2005 - 08:42 #1
Ved meget store objekter: drop remoting og brug sockets !
Avatar billede burningice Nybegynder
11. marts 2005 - 09:29 #2
ja... noget binær serialisering og afsendelse over sockets burde vel kunne gøre det.
Avatar billede arne_v Ekspert
11. marts 2005 - 09:41 #3
Store objekter fra en database vil vil typisk være en BLOB og behøver man
ikke engang serialisere fordi man allerede står med et byte array.
Avatar billede segato Nybegynder
11. marts 2005 - 09:47 #4
Nu er jeg bare nyskerrig. Bygger remoting ikke på sockets hvis man vælger en tcp kanal?
Avatar billede burningice Nybegynder
11. marts 2005 - 09:50 #5
et datatable med 1 million poster kan vel også kategoriseres som et stort object? :)
Avatar billede arne_v Ekspert
11. marts 2005 - 09:52 #6
Jo.

Remoting over TCP består af:

1)  serialiser alle argumenter til et byte array
2)  send byte array over socket
3)  deserialiser alle argumenter fra byte array

d.v.s. at din kode ser objekter ppå client side og objekter på server side
og .NET håndterer alt det trivielle arbejde

Ofte er det mebet smart.

Men I dit tilfælde vil du jo netop ikke have #1 og #3 udført usynligt.

Du vil gerne vide hvor langt den er kommet i processen.

Og eventuelt (hvis vi snakker GB objekter) vil du slet ikke have
hele objektet i memory samtidigt.
Avatar billede arne_v Ekspert
11. marts 2005 - 09:53 #7
cf>

Ja.

:-)
Avatar billede Slettet bruger
11. marts 2005 - 10:04 #8
Meget gode argumenter for sockets må jeg sige.... det vil jeg på det kraftigste overveje!
Avatar billede segato Nybegynder
11. marts 2005 - 10:17 #9
Ja det er en logisk forklaring. Takker for det Arne.
Avatar billede Slettet bruger
11. marts 2005 - 10:33 #10
Ja - det er vist lukketid arne_v - tak for hjælpen.
Avatar billede arne_v Ekspert
11. marts 2005 - 11:23 #11
så ligger jeg et svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester