webForumDet fria alternativet

Hämta och visa extern data för användaren

.NET

11 svar · 468 visningar · startad av renholm

Medlem sedan apr. 20012 266 inlägg
Frågan#1

Problem
Att visa RSS data för användaren utan att att hela sidan blir seg pga. att det tar lång tid att hämta datan från extern part.

Förslag till lösning
Att dra igång en tråd eller async anrop och visa texten "Laddar innehåll" för användaren, när denne sedan laddar om sidan visar datan i fall den har hämtats.

Problemet med ovanstående är att jag inte är helt 100% hur den ska genomföras, vill t.ex inte att datahämtningen skall inledas för varje användare utan bara för den första och sedan automatiskt visa "Laddar innehåll" för kommande besökare tills data är nedladdad.

Någon som kan ge lite ljus över detta eller har en bättre lösning?

Medlem sedan aug. 20003 575 inlägg
#2

1. Kontrollera om innehållet måste uppdateras.,

2. Kontrollera om någon håller på att uppdatera (en semafor t.ex.).

3. Om någon uppdaterar gör någon loop som ligger och kollar då och då om informationen är uppdaterad.

Tre stycken rätt så bra states?

Hur du löser det med laddning osv varför starta en ny tråd när det är html det handlar om, skall det bara stå "sidan laddar" så behövs ingen trådning men vill användaren däremot ha status på laddningen då är du nog så illa tvungen.

Medlem sedan apr. 20012 266 inlägg
#3

Antar att det krävs någon form av trådning för att undvika att sidan väntar på att data skall hämtas klart. Kör man det i Page_Load t.ex måste den vänta på att datan är klar tills den kan skriva ut sidan till användaren.

Medlem sedan aug. 20003 575 inlägg
#4

Det du skulle kunna göra är nog att skapa en tråd som sköter uppdatering av data. När tråd startar börjar den med att sätta en semafor i datakällan som säger att uppdatering körs när den är klar så uppdateras denna semafor till att uppdateringsproceduren är ledig.

Då fungerar de states jag beskrev förut.

För när tråden är klar så ser sidorna med laddning sker.
1. Ingen uppdatering sker
2. Ingen information behövs uppdateras för att ".....".
3. Hämta / visa data.

Medlem sedan apr. 20012 266 inlägg
#5

Ska testa låter som en bra lösning, återkommer

Medlem sedan maj 2003151 inlägg
#6

Hur gick det då?
Jag sitter just nu och kodar på en RSS reader och grubblar
över samma sak. Min lösning är dock att den cache:ar xml filerna i användarens mapp och hämtar bara om en gång var 30:onde minut .. men det hade onekligen varit bra om man kunde uppdatera RSS utan att sidan blir slö även om man bara ladda hem dem.

Medlem sedan maj 20012 812 inlägg
#7

Då informationen i en RSS knappast kan betraktas som tidskritisk så är mitt föslag på lösning följande.

1. Skapa en externapplication (typ windowsservice) som ligger och hämtar datan från källan och spara den i en XML-fil/databas.
2. Du låter sedan sidan hämta den XML-fil som ligger lokalt på datorn/läser från databasen.

På detta vis så slipper besökaren den tid det tar att hämta alla infomration från en annan server eftersom den redan ligger lokalt.

den externa applikation har sedan som uppgift att kontollera om datan ändras, alltså får den ligga och polla den datan med jämna internvall och när en förändring har inträffat så uppdateras datan lokalt.

- M

Medlem sedan maj 2003151 inlägg
#8

Jo den tanken har slått mig med ...
Jag gillade inte den först .. då jag inte har någon server mer än min egen dator ... fast desto mer jag tänker på desto bättre blir det :)

Tack!

Medlem sedan apr. 20012 266 inlägg
#9

Tyvärr kom det upp massa annat så har inte haft tid att kika på det något mer. Gladh lösning är strålande så länge men kan installera en service på servern, dock är det relativt sällan webbhotell tillåter detta. Därav kan en lösning som körs från ASP.NET kringå problemet.

Medlem sedan maj 20012 812 inlägg
#10

Gladh lösning är strålande så länge men kan installera en service på servern, dock är det relativt sällan webbhotell tillåter detta. Därav kan en lösning som körs från ASP.NET kringå problemet.

Det finns faktiskt en lösning som inte kräver service, den är dock inte lika snygg, men det är att istället för en windowsservice så skapar du en ASP.NET sida som gör precis samma sak som ligger och kör hela tiden. Bara att låta den ligga i en loop, se bara för gudskull till att gör Sleep på tråden annars så kommer webhotellet att kicka din site lång väg. Du måste också själv ha koll på att sidan körs då eftersom serven kan startas om utan att du vet det. Det skall dock gå att lösa med att koda in alla kod i Application_onStart() som skall köras när din site startas första gången av någon besökare eller om det var när IIS:en startas.

- M

Medlem sedan apr. 20012 266 inlägg
#11

Kör man den i en separat tråd då från Application_OnStart? Eller går det bra att bara loopa på där?

Medlem sedan maj 20012 812 inlägg
#12

Kör man den i en separat tråd då från Application_OnStart? Eller går det bra att bara loopa på där?

Bra fråga har inte testat, det är rent teoretiskt förslag. Kan dock tänka mig följande senario.

1. Kör det utan att skapa en ny tråd. Om det är en besökare som triggar Application_OnStart så blir sidan aldrig visade för besökaren eftersom den tråden då fastnar i loopen.
2. Kör det i en egen tråd. Starta tråden och låter den ligga och loopa, och sedan så kan huvudtråden gå vidare och visa sidan. Men vad händer när huvudtråden är färdig, dör undertråden då?
Om man sätter IsBackground = false, så måste undertråden köra färdigt innan "application" kan dö.

Så det borde fungerar med att starta en ny tråd och där köra loopen, men det är ju bara att testa :)

- M

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)