Avatar billede ibleif Nybegynder
30. oktober 2004 - 19:55 Der er 15 kommentarer og
1 løsning

Opdatering af website.

Hej alle!

Jeg har lige nogle spørgsmål, som jeg gerne vil have svar på.

1. Når jeg i Visual Studio vælger at lave en "Build" på mit projekt efter nogle ændringer, så forsvinder alle de sessions der er logget ind på sitet. Hvorfor?

2. Hvis jeg kopierer en ny web.config / global.asax ind på mit website.. sker der så det samme? Registerer sitet så ændringerne med det samme, eller ligger nogen af disse filer i noget cache? Eller hvis jeg bare smider en ny webform (med codebehind) ind ?

3. Er der ellers nogen gode råd i forbindelse med opdateringer på/af ens side, som I lige vil ud med? :-)

Glæder mig til at høre fra jer!

Smider mange point i, da jeg håber at mange vil kommentere på det... :-)

// Ibleif
Avatar billede arne_v Ekspert
30. oktober 2004 - 19:58 #1
Jeg formoder at #1 skyldes #2.

#2 er almindelig kendt. Det bruges faktisk tit til at force en restart. Andre
mere kyndige end mig må forklare hvorfor.
Avatar billede ibleif Nybegynder
30. oktober 2004 - 20:00 #2
Det er et svært spørgsmål, når man skal finde en mere kyndig end arne_v! :-)

Det virker da bare uheldigt, at alle ens brugere bliver logget af sitet, når man vil lave en opdatering af et eller andet.

// Ibleif
Avatar billede ibleif Nybegynder
30. oktober 2004 - 20:01 #3
I forbindelse med spørgsmål 2 - der tænker jeg mere en situation, hvor jeg sidder og udvikler på min lokale (hvor det ikke gør noget at build laver en 'restart'), og så uploader de filer til min "produktions-server/webhotel" jeg har ændret.

// Ibleif
Avatar billede arne_v Ekspert
30. oktober 2004 - 20:02 #4
Jeg ved meget om meget.

Men ikke om deploying af ASP.NET applikationer. Snepnet, Cyberfessor, Odegaard
er dem som vil vide noget om sådan noget.
Avatar billede snepnet Nybegynder
30. oktober 2004 - 20:40 #5
Halløjsa :o)

1
Når du bygger dit projekt i Visual Studio 2003 (som jeg formoder er det du bruger) - genereres der en ny version af den assembly, hvilket medfører at grundlaget for din applikation ændres.
Denne ændring registreres, og gør at applikationen genstarter.

2
Web.config er en overvåget fil, da den også har en central betydning for din applikation.
Ændringer i denne vil derfor ligeledes afstedkomme en genstart.

Dine session kører som default i samme proces som din applikation, og de vil derfor ryge når applikationen genstarter.

Det er direkte understøttet at du sørger for at holde dit state out-of-process. Gør du det - vil du kunne bevare state på tværs af disse genstarter.
(du kan desuden meget enkelt sørge for at det gemmes på en sql-server).

Generelt vedrørende state i ASP.NET
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp12282000.asp
(beta - ældre dato)

http://support.microsoft.com/kb/307598

Og her (god og direkte):
http://blogs.msdn.com/tims/archive/2003/11/21/57453.aspx

(der findes temmelig mange andre)

3
Gode råd i forbindelse med opdateringer.... Det ved jeg snart ikke... Det kommer jo lidt an på hvilken metode du bruger til det nu.

Visual Studio understøtter at du kopierer de betydende filer direkt ud på dit web. Du kan gøre det på den måde, at du markerer dit web-projekt - går op i menuen project, og vælger copy project.
Der får du så muligheden for at gøre det via file-share eller frontpage-extensions.

Det plejer at være en rimelig enkel løsning, hvis du er i en fase hvor du ofte opdaterer mange filer, men efterhånden som applikationen bliver mere og mere færdig - og måske vokser i størrelse, vil du formegentlig foretrække en almindelig ftp-løsning.

Til sidst vil applikationen muligvis blive så færdig, at du vil foretrække at lave en reguler installation af den hvis der kommer en ny version, og i den forbindelse er det uhyre enkelt at lave en installer vha. Visual Studio (jeg tror det tager under 2 minutter at lave det).

Der var lidt at starte på - håber du kan bruge det til et eller andet - og spørg endelig løs.

mvh
Avatar billede ibleif Nybegynder
30. oktober 2004 - 22:58 #6
Lige en kort en.. (Har ikke fået gennemlæst alle dine links...)

Det vil sige.. hvilke filer kan jeg opdatere på, uden at at det påvirker min applikation til genstart?

// Ibleif
Avatar billede snepnet Nybegynder
30. oktober 2004 - 23:08 #7
dine aspx og ascx filer + diverse ressourcer (billeder, teksfiler... hvad du nu måtte have).

jeg tror ikke der er er andet end dll-filen, web.config og global.asax der afstedkommer genstart, og global.asax har jeg aldrig brugt til noget i en asp.net applikation... må jeg spørge hvad bruger du den til ?

mvh
Avatar billede snepnet Nybegynder
30. oktober 2004 - 23:16 #8
(jeg spørger egentlig mest jeg ikke mener at visual studio overhovedet vil vise dig filen med standardopsætning - så hvis du vil skrive i den er det uden for visual studio.... gør du det sådan - eller er det bare mig der husker helt forkert ?)
Avatar billede snepnet Nybegynder
30. oktober 2004 - 23:57 #9
global.asax indeholder kun det her med vs-default :

<%@ Application Codebehind="Global.asax.cs" Inherits="<projectname>.Global" %>

men den er "monteret" med en code-behind fil som normalt vil være den du kan åbne i vs, og hvis du retter i den (altså code-behind filen) får du ikke nogen genstart.

men bortset fra det - med vs-default vil de rettelser du laver i dine code-behind filer aldrig træde i kræft med mindre applikationen får en ny dll at leve af - og så vil du få din genstart.

der er derfor ikke meget fidus i at lave rettelser i din code-behind med mindre du distribuerer en ny dll.

hvad aspx-siderne angår er det en lidt anden sag.... de kan som nævnt rettes uden genstart, men hvis det du retter i din aspx-fil også medfører rettelser i din code-behind kan du få fejl, hvis du ikke sørger for at de følges ad (og så har du din genstart alligevel).

Det med at du har en aspx-fil du distribuerer, og noget code-behind som du distribuerer som en dll-fil, er ikke som sådan en asp.net-ting... det er en visual studio ting, som du kan komme uden om, hvis du er interesseret.
andre miljøer (webmatrix) laver ikke en dll-fil ud fra dit webprojekt - så der distriburer du normalt bare en fil med både aspx- og C# kode, og så er det jit-compileren der klarer jobbet på serveren.

det har alene noget at gøre med det der står i dit page-directive (den øverste linie der står i din aspx-fil når du laver en ny form i VS), og som ser sådan her ud (afhængig af dit projekt mv.).

<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="<projectname>._Default" %>

(code-behind er udelukkende en oplysning til VS om hvad det er for en fil du skriver din code-behind i).

I webmatrix ville den have set sådan her ud pr. default :

<%@ Page Language="C#" %>

Der står det hele så i samme fil, og bliver jit-kompileret.

...

For at gøre det hele fuldstændig uoverskueligt, så kan du sagtens gøre det på den måde at du distribuerer din aspx-fil, og en code-behind fil uden at have kompileret det på forhånd (fungerer sådan set på samme måde som webmatrix-modellen, bortset fra at du kan holde din c# kode adskildt fra din aspx-kode).

det kan du gøre ved at angive et page-directive som dette :

<%@ Page language="c#" Src="SomePage.aspx.cs" Inherits="SomePage"%>
(i den fil der hedder SomePage.aspx.cs skal du så have en klasse der SomePage og som arver fra System.Web.UI.Page)

Såh... der er lidt forskellige måder at gøre det på.

jeg håber ikke det jeg skrev fik gjort det hele mere forvirrende... det var et forsøg på lidt info omkring forholdende.
jeg synes du bare skal fortsætte med den måde VS gør det på indtil videre - og så bare huske på at du smider folk af når du opdaterer dit site (hvilket vel også er ok... du ændrer jo applikationen, og ændringen kunne vel sådan set godt afstedkomme at diverse sessionvariable ikke var noget værd bagefter alligevel - du kunne jo have ændret typer mv. på dem).

håber du kunne bruge det til en lille smule - ellers spørg løs.

mvh
Avatar billede snepnet Nybegynder
31. oktober 2004 - 00:03 #10
en lille detaljer... hvis du vil prøve denne model :
<%@ Page language="c#" Src="SomePage.aspx.cs" Inherits="SomePage"%>
er det en god idé at sikre at du IKKE får lavet en dll-fil ved build fra vs... det kan du gøre ved at højreklikke på din solution, og vælge configuration manager... der kan du så fjerne hakket i build.
mvh
Avatar billede ibleif Nybegynder
31. oktober 2004 - 10:45 #11
Hej igen!

Nu har jeg fået læst dine lange svar - og mange tak for den energi du ligger i, at give et godt svar. Det er jeg dig taknemmelig for!

Jeg har lært en masse ved det, og jeg er sikker på at der opstår flere spørgsmål i løbet af de næste par dage, men vil lige sidde og rode med det "hands-on", så jeg kan se hvad jeg løber ind i. Jeg lader derfor spørgsmålet stå lidt.

Ang. global.asax havde jeg planer om, at bruge til noget "Hvem er online", hvor jeg ville gemme brugerdata i en Application, og så redigere ved de forskellige events til start/stop application/session! Som jeg har gjort før i "classic" ASP 3.0. Tror ikke det kan laves bedre?

// Ibleif
Avatar billede snepnet Nybegynder
31. oktober 2004 - 11:55 #12
Fedt at du kunne bruge det til noget :o)

Det bruger man også stadig i vid udstrækning (altså det med Global), men det vil være normalt at skrive det i C#-koden (Global.asax.cs), og ikke i Global.asax.

I koden er der hooket op til de vanlige events på forhånd, og du kan bare samle dem op der og oprette diverse sessionvariable ell. og du kan også gøre sådan noget som dette, hvis det skulle være interessant.

// gammel vin på nye flasker i din global.asax.cs
protected void Session_Start(Object sender, EventArgs e)
{
  this.Context.Items[ContextKeys.Test] = "Er det ikke nemt ?";
}

// og et eller andet sted hvor du har brug for det :
someLabel.Text = Context.Items[ContextKeys.Test].ToString()

ContextKeys.Test er ikke noget magisk.... jeg er bare ikke så vild med at have sådan noget som dette

Context.Items["en eller andet string"]

Stående for mange steder, så jeg plejer at lave en lille klasse til den slags, og i eksemplet kunne der så ligge en klasse som denne :

public class ContextKeys
{
  public static string Test
  {
      get{return "TEST";}
  }
}

Så kan du også udnytte den lækre intellisense i VS, og du kan minimere smuttere med string-indexering.

Håber det kunne bruges som lidt inspiration.

/snep
Avatar billede ibleif Nybegynder
31. oktober 2004 - 12:27 #13
Ellers utrolig spændende med den ASP.NET Session Server Services, men hvor er det surt, at den ikke kan håndtere Session_OnEnd eventet. Dette virker kun i InProcess, så har desværre ikke så meget valg der. Så må jeg jo vente med at opdatere til om natten når "OnlineUsers = 1" :-)

// Ibleif
Avatar billede snepnet Nybegynder
31. oktober 2004 - 14:04 #14
Jamen hej igen :o)

Denne her kunne du muligvis bruge til noget :
http://www.eggheadcafe.com/articles/20030416.asp

/snep
Avatar billede snepnet Nybegynder
05. november 2004 - 23:58 #15
hej ibleif - går det godt her ?
(jeg kyler lige et svar, hvis du kunne bruge noget af det til noget - ellers spørger du bare :o).
mvh
Avatar billede ibleif Nybegynder
06. november 2004 - 08:13 #16
Har lært en masse - så er meget taknemmelig! Super!

// Ibleif
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