Avatar billede cogitans Nybegynder
16. oktober 2004 - 17:37 Der er 77 kommentarer og
1 løsning

Socketbasseret overførsel af data

Jeg har et serverprogram, hvor man kan vælge en fil i.
Klienterne på intranettet (med dynamiske IP'er) kan så klikke på filnavnene på en HTMLbasseret brugergrænseflade. Men hvordan lyder koden så for, at der bliver oprettet en dataoverførsel mellem de 2 computere?
Jeg har en idé om, at lave en løsning, hvor aplikationen registrerer clientens ip, åbner en socketport på clientens maskine og så sender data fra min maskine (serveren) over til clienten sådan.
Men hvordan laver man det kodemæssigt?
Avatar billede arne_v Ekspert
16. oktober 2004 - 17:45 #1
Hvis client programmet allerede har en socket åben til server programmet,
så kan du vælge at bruge den eller du kan åbne en ny. Hvis du vælger at åbne en ny,
så kan du vælge om det er client eller server som skal etablere connection. Ved
det valg skal du tænke firewalls !!
Avatar billede arne_v Ekspert
16. oktober 2004 - 17:45 #2
Hvis client programmet er en browser så er dit problem mere at få startet
et rigtigt client program.
Avatar billede cogitans Nybegynder
16. oktober 2004 - 17:52 #3
Clienten er en browser, ja.
Hvis jeg skal tænke firewalls ved det ene valg, så tror jeg bare, at vi vælger den anden løsning, så det bliver så ligetil som muligt.
HVordan ser den anden løsnng ud kodemæsiigt?
Avatar billede arne_v Ekspert
16. oktober 2004 - 18:05 #4
Hvis det er privat PC'ere til firma browser så skal du nok have client til at connecte
til server (de færreste brugere kan fine ud af at åbne porte).
Avatar billede arne_v Ekspert
16. oktober 2004 - 18:06 #5
Det er ikke så svært at lave socket kommunikation i C#. Det har jeg eksempler
liggende med.

Men hvordan vil du få startet client app ?
Avatar billede cogitans Nybegynder
16. oktober 2004 - 18:49 #6
Altså clienten starter serverHTML'en over intranettet ved simple kald af aspx-siden. Her blver de så præsenteret for et link til en fil, som de på den måde skal kunne overføre til deres egen computer vha et klik på linket. Mere ved jeg ikke, hvad jeg skal svare til de førnævnte spørgsmål....
Avatar billede arne_v Ekspert
16. oktober 2004 - 19:17 #7
Hvis det pågældende link er et ægte HTML link, så behøver de vel slet ikke
noget program på client, så requester browseren det vel bare fra serveren
og alt arbejdet går ud på er at lave den rigtige URL i linket.
Avatar billede cogitans Nybegynder
16. oktober 2004 - 19:19 #8
Ja, men der opstår nogle uforklarlige problemer med den løsning. Det fungerer i hvert fald ikke. Derfor ville jeg lave en socketbaseret løsning, som træder i kræft, når cllienten requester en fil.
Avatar billede burningice Nybegynder
17. oktober 2004 - 20:33 #9
... måske vi burde få løst de uforklarlelige problemer først, istedet for at starte på noget helt nyt. Hvad er det som ikke du'r? Hvilket prorgram er det der serverer html-siderne til klienten? Hvor ligger filerne, på klientens maskine?
Avatar billede cogitans Nybegynder
17. oktober 2004 - 21:52 #10
Det er en længere historie. Det er bl.a. nogle aspx-filer, nogle html-sider og noget database. Men det skulle være sat rigtig op. Jeg har før fået hjælp med opsætningen af det. Problemet er sikkert, at clientcomputerne ikke er sat korrekt op til at understøtte funktionalitetten.
Og det kan jeg formentlig komme ud over, ved at implementere den førnævnte løsning.
Avatar billede burningice Nybegynder
17. oktober 2004 - 21:56 #11
altså... du kan ikke lave en simpel <a href="<din fil">, som klienten kan trykke på i sin browser?
Avatar billede cogitans Nybegynder
17. oktober 2004 - 22:49 #12
Det er kun en socketbasseret løsning, jeg er interesseret i....
Avatar billede burningice Nybegynder
22. oktober 2004 - 11:34 #13
hvad med at lave en applet som kører i klientens browservindue?
Avatar billede cogitans Nybegynder
22. oktober 2004 - 11:47 #14
Tjo, det kan da godt være. Hvordan ser sådan et eksempel ud i komplet kode?

Og Arne - må jeg ikke se dine føromtalte kodeeksempler?
Avatar billede arne_v Ekspert
22. oktober 2004 - 11:56 #15
server.cs:

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;

class Server
{
    public static void Main(string[] args)
    {
        TcpListener server = new TcpListener(IPAddress.Any, 1234);
        server.Start();
        TcpClient client = server.AcceptTcpClient();
        StreamReader rdr = new StreamReader(client.GetStream());
        StreamWriter wrt = new StreamWriter(client.GetStream());
        string line;
        while((line = rdr.ReadLine()) != null)
        {
            wrt.WriteLine("Jeg har modtaget: " + line);
            wrt.Flush();
        }
        rdr.Close();
        wrt.Close();
        client.Close();
        server.Stop();
    }
}

Client.cs:

using System;
using System.IO;
using System.Net.Sockets;

class Client
{
    public static void Main(string[] args)
    {
        TcpClient client = new TcpClient("localhost", 1234);
        StreamWriter wrt = new StreamWriter(client.GetStream());
        StreamReader rdr = new StreamReader(client.GetStream());
        wrt.WriteLine("Jeg hedder Arne");
        wrt.Flush();
        Console.WriteLine(rdr.ReadLine());
        wrt.WriteLine("Dette er en test");
        wrt.Flush();
        Console.WriteLine(rdr.ReadLine());
        wrt.Close();
        rdr.Close();
        client.Close();
    }
}

bemærk at det er super simpelt (serveren er single threaded).
Avatar billede cogitans Nybegynder
22. oktober 2004 - 13:48 #16
Ja, den ser da godt nok noget simpel ud ;-)

Men jeg forstod det egentlig sådan, at du havde et eksempel, hvor klienten kunne klikke på et link i browseren, og hvor serveren så sendte filen til clienten? Og det må skam meget gerne være singletreaded....vel at mærke hvis det har den effekt, at 1 client kun kan hente data gennem 1 tråd ad gangen, men hvor der så godt kan være flere clienter, som hver henter data gennem 1 tråd hver for sig?
Avatar billede arne_v Ekspert
22. oktober 2004 - 15:04 #17
Jeg mener kun at jeg lovede "socket kommunikation ... eksempler".

Det andet kan jeg ikke rigtigt hjælpe med, da jeg stadig ikke helt
forstår hvordan det skal teknisk kunne lade sig gøre.
Avatar billede cogitans Nybegynder
22. oktober 2004 - 16:17 #18
;-) ja, det er da vist også rigtigt nok. Jeg håbede lige i min forvirring, at du havde et mere eksemplerisk eksempel til mig...

Men okay - jeg har det grundliggende nu, så jeg roder lige lidt med det selv så...
Avatar billede burningice Nybegynder
22. oktober 2004 - 18:56 #19
en applet kan enten være en System.Windows.Forms.Control eller en javaapplet. Rent kodemæssigt tror jeg at jeg er lige så forvirret som arne_v om dine hensigter, så jeg tror ikke jeg på stående fod kan komme med et eksempel som opfylder det du gerne vil have
Avatar billede cogitans Nybegynder
22. oktober 2004 - 19:16 #20
Mine hensigter er egentlig ret simple:

clienten bliver præsenteret for nogle links (links til datafiler på serveren). Clienten præsenteres for dette gennem en browser. Når clienten så trykker på et link, skal data'en overføres fra serveren. Det er dette trin, som dette spørgsmål er oprettet til.
Linket ved clienten er den absolute sti til data'ene på serveren (det er altså mapped o.s.v.). Denne sti skal så køres gennem appletten, som derved tilbyder clienten, at overføre de aktuelle data til clientcomputeren.
Avatar billede arne_v Ekspert
22. oktober 2004 - 20:27 #21
Lad mig se om jeg har forstået det rigtigt.

På serveren kører IIS med ASP.NET sim lytter på port 80 og en speciel
server applikation som lytter på f.eks. port 12345.

Brugeren starter browseren og henter en dynamisk genereret side fra IIS/ASP.NET
som vises.

Den side har et specielt link.

Når brugeren klikker på det link, så startes en client applikation med
en absolut fil sti på serveren som argument som connecter til server
applikationen på port 12345 og requester den pågældende fil.

Som serveren så sender til client der gemmer den på client PC'ens disk.

Er det korrekt ?
Avatar billede cogitans Nybegynder
23. oktober 2004 - 14:21 #22
tja, serverenapplikationen er vel asp.NET siden? Og den lytter vel bare på port 80. Men det, jeg gerne vil implementere, er så en form for serverapplikation, som kan overføre data gennem en anden port.
Men det er rigtig forstået ellers.
Avatar billede burningice Nybegynder
23. oktober 2004 - 19:17 #23
klienterne... er det internt på et intranet, eller kan det være hvem som helst?
Avatar billede cogitans Nybegynder
23. oktober 2004 - 19:41 #24
Det er blot internt på intranettet.
Avatar billede burningice Nybegynder
23. oktober 2004 - 21:26 #25
så ville jeg lave en policy der sørgede for at få et eget udviklit program installeret på alle dine klienter
Avatar billede cogitans Nybegynder
24. oktober 2004 - 13:17 #26
?
Og hvordan gør jeg det?

Vil det også virke i en browserbasseret komunikation?
Avatar billede burningice Nybegynder
24. oktober 2004 - 18:59 #27
det med at få det installeret er vel noget med at oprette en policy i din AD (hvis i altså kører Windows-netværk) eller også noget med noget login-script ell. lign.

Det er så et program der ikke gør andet end at vente på at en server begynder at sende noget data til klienten. Og dette sker jo netop når at en bruger har trykket på et link, ikke sandt?
Avatar billede cogitans Nybegynder
24. oktober 2004 - 19:29 #28
Ahh, jo. Nu kan jeg se lyset. Det var da en fiks løsning ;-)

Policy i AD siger mig dog ikke noget. Hvad betyder det?
Og er det muligt, at der kan blive lagt et kodeeksempel herind på eksperten, hvor en mulig løsning er implementeret?
Avatar billede burningice Nybegynder
24. oktober 2004 - 19:39 #29
kodeeksempel til et program kan være det arne_v har postet... hvis du lige laver det om til enten en windows-service eller et GUI-program der er skjult for brugeren, indtil AcceptTcpClient() bliver udføjrt, hvorefter der kommer fe.sk. en progressbar eller en prompt om hvor filen skal gemmes, så ville det være fjong.

Prøv at snak med jeres administrator om AD policies, det kan han nok bedre forklare end jeg kan. der står dog noget om det her http://www.winnetmag.com/Article/ArticleID/37554/37554.html, og ellers ved google en masse om det ;)
Avatar billede cogitans Nybegynder
24. oktober 2004 - 20:00 #30
Så laver jeg blot noget med Arne's eksempel. Men hvad er en "windows-service" for noget?
Avatar billede burningice Nybegynder
29. oktober 2004 - 20:12 #31
en windows-server er kort forklaret et program uden noget interface. En process der kører i baggrunden og laver noget arbejde.
Avatar billede cogitans Nybegynder
29. oktober 2004 - 21:47 #32
Ahh - nu ser jeg lyset.
Er der så også nogle, som har et eksempel på sådan én?
Avatar billede arne_v Ekspert
29. oktober 2004 - 21:50 #33
Overskriften på http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=300
lyder jo som noget af det rigtige
Avatar billede cogitans Nybegynder
01. november 2004 - 11:01 #35
Jeg skal lige høre...som jeg har forstået det, så er det noget lign.: der installeres en backgroundservice på clienten, der klikkes på et link ved serveren, seren sender data til kllienten, som backgroundsservicen tager imod. Er det rigtig forstået? I de dokumenter, som jeg har læst om det, får jeg nemlig indtrykket, at en windowsservice kun kan køre på serveren. Hvad er så det rigtige? Det er da kun smart, hvis den kører på klienten....?
Avatar billede burningice Nybegynder
01. november 2004 - 17:19 #36
en service er rigtig nok bare et program der kører i baggrunden... og der er ingen regler for at det kun kan køre på en server. Jeg vil skyde på at der kører omkring 40 af dem bare på din computer lige nu. Det er lige fra services der håndterer Plug and Play, Printeren og firewall, til fildeling, dnsopslag, netværksforbindelser oh diskstyring.

Ja, du har forstået det rigtigt i samspillet mellem client og server. Det er i hvert fald den løsning som jeg ville satse på.
Avatar billede cogitans Nybegynder
01. november 2004 - 18:39 #37
Jo, men har jeg som server så rettigheder til, at installere en windowsservice på en klient, når han kobler sif op til mig webside?
Det ville jeg da regne med, at der var en masse sikkerhedsmæssige problemer med. Det har jeg da erfaret fra min javaprogramering...?
Avatar billede burningice Nybegynder
01. november 2004 - 19:14 #38
det kan kun lade sig gøre hvis du har rettigheder til maskinerne ved at de sidder på et LAN som du, eller noget du kender, har kontrol over. men jeg kunne også kun forestille mig at din løsning vil kunne bruges i et sådan scenario
Avatar billede cogitans Nybegynder
01. november 2004 - 20:50 #39
Klienterne er koblet til det samme LAN, som jeg er. Men jeg har ikke kontrol eller rettigheder med nogle andre maskiner end min egen. Fungerer det så?
Avatar billede burningice Nybegynder
01. november 2004 - 21:38 #40
erm... så det er ikke dig der står for intranettet eller hvad?
Avatar billede cogitans Nybegynder
02. november 2004 - 09:58 #41
Næh, jeg er som sådan bare sat på intranettet som en bruger. Men jeg skal opfylde en funktion som server på intranettet.
Avatar billede burningice Nybegynder
02. november 2004 - 10:42 #42
well.... hvis du ikke har rettighed til at installere noget på clienten, så må du gå efter applet-versionen.

Kører alle klienterne IE og har .Net frameworket installeret?
Avatar billede cogitans Nybegynder
02. november 2004 - 12:26 #43
Godt spørgsmål....det gør de sikkert ikke.
Men appletversionen skulle kunne klare opgaven så?
Avatar billede burningice Nybegynder
02. november 2004 - 17:14 #44
ja.. men

1) hvis du laver den i c# skal klienterne køre med IE og have .net installeret
2) hvis du laver dne i java burde alle kunne se den, men så skal du over i java-kategorien for at få hjælp.

jeg kan dog ikke forstå. Hvis det ikke er en decideret intranet-opgave, hvorfor ialverden så ikke tage sig til takke med de muligheder som de etablerede standarder tilbyder?
Avatar billede cogitans Nybegynder
03. november 2004 - 11:37 #45
Det ER en intranetopgave. Og de allerede eksisterende muligheder er ikke tilfredsstillende i dette tilfælde. Desuden vil jeg gerne lave denne løsning, da det giver mig noget erfaring indenfor området.
Avatar billede burningice Nybegynder
03. november 2004 - 14:00 #46
well.. hvis det ER en intranetopgave, hvad forhindrer dig så i at gå op til jeres edb-afdelingen og sige at du gerne vil have det her program installeret på alle de maskiner der skal bruge intranettet.
Avatar billede cogitans Nybegynder
03. november 2004 - 16:35 #47
Det der forhindrer den løsning er, at jeg ikke har den type rettigheder på LAN'et. Derfor er jeg tvunget til, at lave min egen løsning. Jeg vil lave løsningen i c# og det dertilhørende. Hvis der så er nogle ting (f.eks. IE mangler), så må det jo bare være sådan. Det skal vi ikke tage hensyn til herinde. Hjalp det? :-)
Avatar billede burningice Nybegynder
03. november 2004 - 17:38 #48
jeg kan stadig ikke forstå... hvis det er en intranet-løsning der skal laves, så kan jeg ikke se problemet i at få et program installeret på alle de maskiner der skal bruge intranettet. Der må da være en form for firma-policy der gør det muligt.

Nå, men det skal jeg vel for så vidt heller ikke blande mig i - synes bare det lyder mærkværdigt.

Hvilket løsning skal vi så gå efter? C# applet'en der kun virker i IE, java eller ?
Avatar billede cogitans Nybegynder
03. november 2004 - 18:12 #49
C#-løsningen har jeg hele tiden være "hooked" på ;-)

(firma-policy kan vi godt glemme. Jeg har KUN kontrol over min egen computer, som så skal fungere som en server mht. det program, jeg laver med dette EkspertSpørgtsmål)
Avatar billede burningice Nybegynder
03. november 2004 - 18:24 #50
det lyder som et rigtig fint intranet i har kørende :P

Well... en C#-applet er egentlig bare en Winform der arver fra Control i stedet for Form. Dvs. at man i bedste tilfælde kan designe og skrive al sin kode i VS.Net som om det var et windows-program og til sidst ændre arvingen så den arver fra System.Windows.Forms.Control istedet.

Når dette er gjort og det er kompilet til en dll-fil lægger du den i samme mappe som din UI-side, og via <applet>-tagget kan du så instantiere din control som fint dukker frem på siden. Her i kan du have en knap som starter en overførsel fra serveren.
Avatar billede cogitans Nybegynder
03. november 2004 - 18:44 #51
Ahh - okay. Det lyder som en let og lige til løsning.
Kan man også kode applet'ten i c# i stedet for i VS.NET ?
Avatar billede burningice Nybegynder
03. november 2004 - 18:55 #52
c# er et sprog, vs.net er et program. umiddelbart vil jeg kode det i vs.net hvis du kan komme til det, eller er C#Develop også et udemærket udviklingsværktøj
Avatar billede cogitans Nybegynder
03. november 2004 - 18:58 #53
Altså, jeg har Visual Studio...er det ikke godt nok?
Avatar billede burningice Nybegynder
03. november 2004 - 19:43 #54
jo, det er fint
Avatar billede burningice Nybegynder
03. november 2004 - 19:44 #55
vel og mærke hvis det er version 7 eller 7.1
Avatar billede cogitans Nybegynder
03. november 2004 - 19:55 #56
Uha...det ved jeg ikke. Jeg skal lige hjem og checke så. Det er i hvert fald Visual Studio 2003....
Avatar billede arne_v Ekspert
03. november 2004 - 19:56 #57
7.0 = 2002
7.1 = 2003
Avatar billede cogitans Nybegynder
03. november 2004 - 19:57 #58
;-)
Så må det jo være v7.1
Avatar billede cogitans Nybegynder
03. november 2004 - 20:33 #59
Hvordan laver jeg så løsningen i Visual Studio?
Avatar billede burningice Nybegynder
03. november 2004 - 21:35 #60
you have no idea of what your are doing, have you?

her er der et eksempel med et c# applet: http://www.csharphelp.com/archives/archive109.html

her er der et eksempel med en der bruger TcpClient i sin c# applet: http://dotnetjunkies.com/Newsgroups/microsoft.public.dotnet.framework/2004/3/30/99207.aspx#99207
Avatar billede burningice Nybegynder
03. november 2004 - 21:41 #61
bare se bort fra det sidste link, det er ikke noget applet... der er dog lidt kode omkring en TcpListener

her er der dog mere om c# applet: http://www.codeproject.com/cs/miscctrl/htmlwincontrol.asp
Avatar billede -mundi- Nybegynder
03. november 2004 - 21:42 #62
Lyder for mig som om det er en simpel "læs en fil fra harddisken, og stream den tilbage til brugeren" funktion som er løbet løbsk :-). Men lytter da lige med en gang.
Avatar billede cogitans Nybegynder
04. november 2004 - 07:58 #63
Ja, nu har vi efterhåndet været inde omkring, at det er en overførsel af data gennem tcp et par gange....

Men jeg checker lige de link ud senere...
Avatar billede cogitans Nybegynder
04. november 2004 - 08:59 #64
Jo, nu har jeg set lidt på det. Det kræver vist lige, at jeg kombinerer de 2 løsninger. Så det må jeg lige se på.
Jeg kan dog ikke rigtig se, hvordan appletten starter noget op, hvor man kan vælge en placering, hvor dataoverførslen skal gemmes (jeg kan ikke se koden for det) ?
Avatar billede cogitans Nybegynder
04. november 2004 - 10:30 #65
Findes der et eksempel på:

After you wrote your custom System.Windows.Forms.Control, create it with a parameterless constructor (which will be called by IE) and wrap it in an assembly.

?

Jeg mangler en forestilling om, hvordan man kalder denne box (som koden kulle generere, men som jeg faktisk ikke kan se nogen kode for), og hvordan datalinket så bliver overført til boxen, hvorefter boxen overfører data fra linket.
Overførsel af data kan jeg nok hitte ud af (vha TCP), men resten kniber det med...
Avatar billede -mundi- Nybegynder
04. november 2004 - 11:22 #66
du kan ikke bruge noget i stil med det her : ?

test.aspx :
<%@ Page language="c#" Codebehind="test.aspx.cs" AutoEventWireup="false" debug="False" Inherits="exp.test" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
    <head>
        <title>test</title>
        <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </head>
    <body>
        <form id="Form1" method="post" runat="server">
            <asp:dropdownlist id="DropDownList1" runat="server" width="168px" autopostback="True"></asp:dropdownlist>
        </form>
    </body>
</html>

test.aspx.cs :
using System;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace exp
{
    public class test : Page
    {
        protected DropDownList DropDownList1;
        private string filedir = @"c:\";

        private void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack){
                DirectoryInfo dir = new DirectoryInfo(filedir);
                foreach(FileInfo file in dir.GetFiles())
                {
                    DropDownList1.Items.Add(file.Name.ToString());
                }
                DropDownList1.Items.Insert(0,"Vælg fil");
            }
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
        private void InitializeComponent()
        {   
            this.DropDownList1.SelectedIndexChanged += new EventHandler(this.DropDownList1_SelectedIndexChanged);
            this.Load += new EventHandler(this.Page_Load);

        }
        #endregion

        private void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) {
            Response.Clear();
            FileStream MyFileStream = new FileStream(filedir+DropDownList1.SelectedItem.ToString(),FileMode.Open);
            long FileSize;
            FileSize = MyFileStream.Length;
            byte[] Buffer = new byte[(int)FileSize];
            MyFileStream.Read(Buffer, 0, (int)MyFileStream.Length);
            MyFileStream.Close();
            Response.ContentType = "APPLICATION/OCTET-STREAM";
            Response.AddHeader( "Content-Disposition", "attachment;filename=\"" + DropDownList1.SelectedItem.ToString() + "\"" );
            Response.BinaryWrite(Buffer);
            Response.End();
        }
    }
}


kræver slf læserettigheder til den pågældende mappe
Avatar billede cogitans Nybegynder
04. november 2004 - 12:09 #67
Tjo, det ser da ud, som noget jeg kan bruge. Jeg skal lige teste det lidt senere...
Avatar billede burningice Nybegynder
04. november 2004 - 13:56 #68
cogitans>> overførsel af data fra din datalist til applet'en kan gøres gennem javascript og dine get/set-metoder lavet i c#-klassen.

Placeringen af filen burde du kunne lave med en FileDialogBox - en simpel windows-control til valg af fil.

Det appleten skal starte op er jo en TcpClient som skal connecte til serveren på en given port og modtage filen. En oplagt mulighed ville være noget ala det her:

http://din-server/getFile.aspx?file=c:\filer\fil.exe

på din getFile.aspx-side har du dit applet som via javascript får overført querystring-variablen file. Dernæst åbner den en FileDialog, hvor brugeren kan vælge hvor filen skal gemmes. Når man har trykket ok opretter den en TcpClient som connecter til serveren, requester filen "c:\filer\fil.exe", og evt. viser en progressbar imens filen bliver downloadet.
Avatar billede cogitans Nybegynder
04. november 2004 - 17:56 #69
Ja, det lyder også som en favorabel løsning. Men vil du ikke sende nogle eksempler herind?

(Jeg har allerede lavet et program, som producerer en strenge, som gennem IIS peger på den angivne datafil.)
Avatar billede cogitans Nybegynder
06. november 2004 - 16:01 #70
Jeg har nu prøvet at implementere et forsøg. Men jeg har lige nogle spørgsmål til koden...den vil nemlig ikke kompileres.
Ved denne linie går det galt:

FileStream file=File.OpenRead(Server.MapPath("/ttawin")+filePath);

Hvilken effekt har "/ttawin" ? Jeg tror nemlig, at det er her, hvor det går galt.
filePath er vel bare stien gennem IIS, ik?

Og så lige et overordnet spørgsmål:
Skal <script runat="server"> skrives i selve HTMLfilen (inde i scriptdelen står metoden OnLoad() f.eks..) ?
Skal dette kode ikke stå i cobehindfilen -> altså i *.cs-filen?
Avatar billede burningice Nybegynder
06. november 2004 - 16:09 #71
kan du prøve at poste al din kode
Avatar billede cogitans Nybegynder
06. november 2004 - 16:21 #72
<%@ Page language="c#" Codebehind="server.aspx.cs" AutoEventWireup="false" Inherits="New.server" %>
<%@ import Namespace="System.IO"%>
<script runat="server">
protected override void OnLoad(EventArgs e){
  base.OnLoad(e);
  string i=Request["i"];
  if(i!=null)
    SendBinaryFile(Convert.ToInt32(i));
  else
    FileNotFound();
}
private void SendBinaryFile(int index){
  string fileName="", filePath="";
  switch(index){
    case 6:
    filePath="/Revision/";
    fileName="budget.doc";
    Response.ContentType="application/octet-stream";
    break;
    default:
    FileNotFound();
    break;
  }
  FileStream file=File.OpenRead(Server.MapPath("/ttawin")+filePath);
  byte[] buffer=null;
  try{
    buffer=new byte[(int)file.Length];
    file.Read(buffer, 0, (int)file.Length);
  }
  catch(Exception e){}
  finally{file.Close();}
  Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName);
  Response.BinaryWrite(buffer);
}
private void FileNotFound(){
  throw new Exception("File Request Error");
}
</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>server</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
          <a href="server.aspx?i=6">Her</a>
        </form>
    </body>
</HTML>
Avatar billede burningice Nybegynder
19. december 2004 - 12:09 #73
OpenRead skal bruge en absolut-sti, dvs. f.eks. c:\hej\med\dig\fil.exe

Server.MapPath("/ttawin") giver dig den absolutte sti til mappen "ttawin" i din applikation. det kunne f.eks være

c:\wwwroot\ttawin

filepath skal derfor indeholde den resterende del af den absolutte path, f.eks. \filer\fil.exe

ang. <script runat="server"> så er det måden at kunne skrive kode i selve aspx-filen istedet for i codebehind
Avatar billede cogitans Nybegynder
19. december 2004 - 12:23 #74
Kan man så skrive c#-kode inde i <script runat="server"> ?
Avatar billede burningice Nybegynder
19. december 2004 - 12:36 #75
ja... der skriver du samme kode som du normalt ville skrive i codebehind. hvis du bruger visual studio går du dog glip af intellisense, men det kommer i 2005'eren
Avatar billede cogitans Nybegynder
19. december 2004 - 18:14 #76
Had vil "intellisense" så sige?
Avatar billede burningice Nybegynder
16. marts 2005 - 22:58 #77
at visual studio kan regne ud hvilken type en given variabel er og derved foreslå dig hvilke metode og properties du kan kalde på den.
Avatar billede cogitans Nybegynder
11. oktober 2005 - 13:40 #78
lukkes
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