webForumDet fria alternativet

läsa in data från klient - spara hos klient

.NET

8 svar · 384 visningar · startad av Bjuris

Medlem sedan juli 2001514 inlägg
Frågan#1

Håller på med ett system, men kunden vill inte spara viss data på servern utan de vill att varje användare som använder systemet skall ha datat sparat på sin egen maskin.

Någon som vet hur jag skall lösa detta?
Jag vill göra det så enkelt som möjligt för användaren då de i regel har ganska låg datakunskap.

Medlem sedan sep. 20011 914 inlägg
#2

Vad är det för data? Vilket format?

Medlem sedan juli 2001514 inlägg
#3

Det är ren text, en lista med personnummer som skall matcha mot en lista av id som i sin tur ligger på servern.

Medlem sedan sep. 20011 914 inlägg
#4

Ok, här är en ganska improviserad lösning. Den bygger på att när en webbläsare öppnar en stylesheet fil(.css) så försöker den att göra det i en texteditor. Den gör det hos mig iaf.

Det första jag gör är att skapa en HttpHandler som skall hantera filer med ändelsen .ashx. Vad handlern gör är att den byter content type på dokumentet den skickar till "text/css" innan den skickar ut den valda datan.

namespace TestFiles
{
    internal class FileHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext c)
        {
            string key = c.Request.QueryString["id"];
            c.Response.Clear();
            c.Response.ContentType = "text/css";
            c.Response.Write(c.Cache[key]);  
            c.Cache.Remove(key);
        }

        public bool IsReusable
        {
            get{return false;}
        }

    }
}

Får att handlern skall funka måste jag lägga till den i inom system.web sektionen i web.config.

<httpHandlers>
        <add verb="*" path="*.ashx" 
         type="TestFiles.FileHandler, TestFiles" />
</httpHandlers>

I .aspx sidan har jag en hyperlink.

<asp:hyperlink id="hp" text="Spara data" runat="server" />

Och dess code-behind fil ser ut så här. Häri lägger jag in den valda datan i cachen som sen handlern tar ut. Därefter ger jag hyperlinken ett random filnamn och en .ashx ändelse. Så när nu användaren klickar på Hyperlinken så borde texten öppnas i någon typ av texteditor som sen slutanvändaren kan spara på sin dator.

...
protected HyperLink hp;

private void Page_Load(object sender, System.EventArgs e)
{
            if(!IsPostBack)
                Bind();
}

private void Bind()
{
            string text = "Någon text som du hämtar från var du vill."
            string key = Guid.NewGuid().ToString();
            Cache[key] = text;
            hp.NavigateUrl = string.Format("{0}.ashx?id={1}", Guid.NewGuid().ToString(), key);      
}
...

Du kan ju testa detta till och börja med och se om du får det att fungera.

Medlem sedan maj 20012 812 inlägg
#5

Håller på med ett system, men kunden vill inte spara viss data på servern utan de vill att varje användare som använder systemet skall ha datat sparat på sin egen maskin.

Tycker du skall ta och prata med din kund igen och föklara bristerna i en sådan lösning.

Den största bristen som finns är att system blir knutet till en spcifik maskin. Alltså så förloras hela iden med att göra det webbaserat. En annan stor brist är att det helt plötsligt är upp till användaren att se till så att datan inte försvinner från denns maskin. Om personen får en hårddisk krasch så går datan förlorad. Oftas har man backup på sin server miljö, men inte lika ofta på klientmiljön.

Om en kund hade bett om en sådan lösning, så tror jag nästan att jag hade vägrat att implementera den. Ibland vet inte kunden vad som är bäst för dem själv.

- M

Medlem sedan juli 2001514 inlägg
#6

bra lösning, men problemet är att användaren inte kommer att klara av att göra detta, det kommer att bli problem om användaren själv får välja vart han/hon vill spara datat, han/hon kommer att glömma detta och det kommer i sin tur att slå tillbaka på oss.

Sen så är det lite för krångligt att hålla på och skapa sin egen fil, det måste gå automatiskt, detta då datat skall kunna både läsas in till servern när man använder systemet och sedan skrivas på klienten när man vill "spara".

Medlem sedan juli 2001514 inlägg
#7

Visst kan man tänka att det är slut i huvudet med att lägga klientdata på sin egen maskin och ja, jag har försökt att få bort den punkten, men de är väldigt klara på just den punkten.

Datat som skall lagras på klienten får nämligen under inga omständigheter ses av någon annan, dvs mycket konfidentiellt.

Medlem sedan nov. 20022 355 inlägg
#8

Du kan ju enkelt skapa ett behörighetssystem för det hela. Då förblir det konfidentiellt. Sen är det bara till att kryptera ner det på serversidan istället :)

Medlem sedan maj 20012 812 inlägg
#9

Datat som skall lagras på klienten får nämligen under inga omständigheter ses av någon annan, dvs mycket konfidentiellt.

Då misstänker jag att det handlar om https och krypterad kommunikation mellan klient och server också?

Man skjuter mygg och silar kameler här. Gör som McFetto föreslår. Lägg ner information krypterad i en databas, eller som textfiler där rättigheten sätts med hjälp av NTFS.

Ni gör ju som ni själva vill, men mitt råd är att lägga all information på servern eftersom, som du säger, kommer slå tillbaka på er när klienten mister sin information.

- M

260 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)