Avatar billede Slettet bruger
11. marts 2007 - 11:54 Der er 9 kommentarer og
1 løsning

Sende store mænger data til server

Hey eksperter

Jeg har et program hvor jeg loader alt det en burger har delt (filer og mapper) ind i et array, og derefter sender det som én lang streng til min server hvor den derefter loader det ind i et array igen. Men nogle gange sender den det over flere gange da strengen er for lang til bufferen, og det går ikke altid lige godt. Kan jeg ikke lave det på en bedre måde?

Jeg tænkte på at serializere det med xml, sende data, og deserializere det på den anden side. Eller måske gemme det i en fil først, sende filen, og serveren udpakker filen

Nogle gode forslag?
Avatar billede kalp Novice
11. marts 2007 - 11:59 #1
helt klart send det som XML.

hvis dit array bare et som

[0] = "c:\Programmer\noget\"
[1] = "c:\Software\noget"

altså bare stier og ligeledes med filer, så er det måske nemmere bare at opbygge XML dokumentet fra scratch end at serializere objektet.

Eller du kan sagtens serializere det nemt men så skal du i hvertfald lige læse som hvordan man serializere objekter til XML. Du skal nærmest mappe hele objektet med xml attributter [XmlAttribute] og mange andre.

Det kan du google;o)

Mit svar var i hvertfald at jeg ville helt klart sende det som XML.
Avatar billede Slettet bruger
11. marts 2007 - 13:34 #2
Jeg indexere først alle filer og mapper i mit array som består af denne type:

public class FileOrFolder
{
    private string _FullHash;
    private string _InFolderHash;
    private string _Name;
    private long _Size;


Hvordan kunne jeg så gøre det bedst?.. altså opbygge XML filen selv eller serialize?
Avatar billede kalp Novice
11. marts 2007 - 14:04 #3
Du kan gøre begge dele stadig...
Hvis du opbygger en XML fil (hvilket er det jeg selv har erfaring med)

så ville du have en masse Nodes som hedder FileOrFolder og i dem under nodes eller attributter som er dine fields.
Avatar billede Slettet bruger
11. marts 2007 - 14:22 #4
Okay, lyder simplelt...

Jeg har en smule erfaring med XMLDokument, men jeg er ikke sikker på jeg gør det helt rigtigt. Har du ikke et godt eksempel på hvordan jeg indsætter xml'en osv?
Avatar billede kalp Novice
11. marts 2007 - 19:50 #5
jo jeg skriver koden på eksperten så du skal selv rette lidt i det.


XmlDocument document = new XmlDocument();
document.LoadXml("<?xml version=\"1.0\" encoding=\"iso-8859-15\"?>
<FileOrFolder id=\"0\"><FullHash>data her</FullHash>
<InFolderHash>data her</InFolderHash>
<Name>data her</Name>
<Size>data her</Size></FileOrFolder>");

og ja så kan du vel sende document afsted.
det der id som er sat til 0 lige nu skal selvfølgelig være dens plads i arrayet.
Avatar billede Slettet bruger
11. marts 2007 - 20:06 #6
Hmm, prøver at gøre det sådan her:

List<FileOrFolder> Shares = new List<FileOrFolder>();

public class FileOrFolder
    {
        private string _FullPath;
        private string _FullHash;
        private string _InFolderHash;
        private string _Name;
        private long _Size;
        private ListType _Type;

        public FileOrFolder()
        {
        }

        public FileOrFolder(string FullPath, long Size, ListType Type)
        {
            this._FullPath = FullPath;
            this._FullHash = FullPath.GetHashCode().ToString();
            this._Size = Size;
            this._Type = Type;

            if (Type == ListType.Folder)
            {
                int Index = FullPath.LastIndexOf(Path.DirectorySeparatorChar);
                string InFolder = FullPath.Remove(Index + 1);
                this._Name = FullPath.Remove(0, Index + 1);

                if (Path.GetPathRoot(InFolder) != InFolder)
                    InFolder = InFolder.Remove(InFolder.Length - 1);

                this._InFolderHash = InFolder.GetHashCode().ToString();
            }
            else
            {
                this._Name = Path.GetFileName(FullPath);
                this._InFolderHash = Path.GetDirectoryName(FullPath).GetHashCode().ToString();
            }
        }

        public string FullPath
        {
            get { return this._FullPath; }
            set
            {
                this._FullPath = value;
                this._FullHash = this._FullPath.GetHashCode().ToString();
            }
        }

        public string FullHash
        {
            get { return this._FullHash; }
        }
       
        public string InFolderHash
        {
            get { return this._InFolderHash; }
        }

        public string Name
        {
            get { return this._Name; }
        }

        public long Size
        {
            get { return this._Size; }
            set { this._Size = value; }
        }

        public ListType Type
        {
            get { return this._Type; }
        }
    }



XmlSerializer x = new XmlSerializer(typeof(FileOrFolder));
TextWriter writer = new StreamWriter("D:\\TestXML.xml");
x.Serialize(writer, Shares);


Men den melder bare XML fejl, ikke andet.. hvad gør jeg forkert?
Avatar billede kalp Novice
11. marts 2007 - 20:26 #7
det er klart.. men den måde du gør det på er den måde jeg ikke selv har erfaring med..

som jeg nævnte tidligere skal du mappe din klasse.

kig på eksemplerne i dokumentationen.
http://msdn2.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx
Avatar billede Slettet bruger
11. marts 2007 - 21:37 #8
Lækkerheds! nu virker det sgu.. skulle bare ændre:


XmlSerializer x = new XmlSerializer(typeof(FileOrFolder));

Til


List<FileOrFolder>)
Avatar billede Slettet bruger
11. marts 2007 - 21:37 #9
omg lorte museknap..

Lækkerheds! nu virker det sgu.. skulle bare ændre:


XmlSerializer x = new XmlSerializer(typeof(FileOrFolder));

Til

XmlSerializer x = new XmlSerializer(typeof(List<FileOrFolder>)));


Smid et svar så får du point
Avatar billede kalp Novice
11. marts 2007 - 22:32 #10
Det får du her:)
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

IT-JOB

Politiets Efterretningstjeneste

Fullstack softwareudvikler i PET

Unik System Design A/S

QA Engineer

Erhvervsakademi Aarhus

Undervisere til it-uddannelser

Netcompany A/S

Test Consultant