webForumDet fria alternativet

En funktion som startar "automatiskt"?

.NET

12 svar · 903 visningar · startad av BigZ

Medlem sedan dec. 20081 inlägg
Frågan#1

Hej!

Hur det går till när man t ex skriver inlägg eller brev som publiceras/skickas senare?

T ex om jag har skriver ett brev som jag vill skicka iväg en timme senare, hur går jag då tillväga? Kan man säga till sin applikation att när klockan är fyra så ska du starta denna funktion?

Går det och finns det ett namn för det som jag undrar över?

Medlem sedan sep. 2005673 inlägg
#2

Många webbhotell använder något som kallas cron-jobb, det är en slags schemaläggare som exempelvis kan anropa en webbsida med ett visst intervall. Så kan du ha kod på sidan som kör igång, exempelvis skicka iväg ett mail som du skrev för en timme sedan.

Medlem sedan feb. 200112 078 inlägg
#3

inspiro skrev:

Många webbhotell använder något som kallas cron-jobb, det är en slags schemaläggare som exempelvis kan anropa en webbsida med ett visst intervall. Så kan du ha kod på sidan som kör igång, exempelvis skicka iväg ett mail som du skrev för en timme sedan.

Vi är i forumet ASP.NET. Antagligen är inte cron-jobb aktuella då.

BigZ: Är din applikation skriven i .NET?

Medlem sedan sep. 2005673 inlägg
#4

Vad innebär cron-jobb då? För om jag förstått det rätt så är det en teknik för att kalla på exempelvis webbsidor med en regelbundenhet, exempelvis en aspx-sida (där man inte behöver ha något grafiskt gränssnitt utan kan köra vilken kod som helst)

Medlem sedan feb. 200112 078 inlägg
#5

inspiro skrev:

Vad innebär cron-jobb då? För om jag förstått det rätt så är det en teknik för att kalla på webbsidor, exempelvis en aspx-sida.

cron är en tjänst/service i unix- och linuxoperativ, som fungerar som en schemaläggare, som kan exekvera olika former av processer. Däribland kan man säkerligen skriva ett program som anropar en webbsida, men att "starta" en php- eller asp-sida på det sättet är inte ett alternativ, eftersom det kräver processning av en webbserver; hence ett http-anrop.

Om applikationen är i .NET, så hostas den sannolikt på en Windowsmaskin (om inte nån tomte fått för sig att köra Mono på linux som plattform) och då är inte cron tillgängligt.

För att lösa det i .NET brukar man skriva en service som ligger och kör. Frågan är ifall webbhotellet tillåter att man startar upp services sådär bara, det är högst tveksamt.

Medlem sedan aug. 20003 575 inlägg
#6

Om webbapplikationen inte startar om eller stängs ner lite då och då så kan du skapa en tråd som gör detta åt dig. Ingen säker lösning med andra ord :(

Medlem sedan sep. 2005673 inlägg
#7

Vet i alla fall att på Binero webbhotell så kan man låta dem anropa en valfri sida vid ett visst klockslag varje dygn, så där var det busenkelt att schemalägga körning av kod (trodde det kallades cron-job). Ingen egen web service behövdes utan man skapade bara en sida, kollade så den anropades av rätt ip-nummer så ingen obehörig kunde köra och sedan var det bara att ha vilken kod som helst där bakom.

Finns säkert hos andra webbhotell också.

Medlem sedan feb. 200112 078 inlägg
#8

inspiro skrev:

Vet i alla fall att på Binero webbhotell så kan man låta dem anropa en valfri sida vid ett visst klockslag varje dygn, så där var det busenkelt att schemalägga körning av kod (trodde det kallades cron-job). Ingen egen web service behövdes utan man skapade bara en sida, kollade så den anropades av rätt ip-nummer så ingen obehörig kunde köra och sedan var det bara att ha vilken kod som helst där bakom.

Finns säkert hos andra webbhotell också.

Ja, och isåfall är det i två möjliga fall;

  1. Utrymmet hostas på en unix/linux-server
  2. Utrymmet hostas på en Windows-server, som har t.ex. cronw installerat.

Jag frågade innan ifall applikationen är i .NET, eftersom tråden ligger i det forumet. Och om så är fallet, så är det endast alternativ 2 som är aktuellt i det här fallet, eftersom jag inte tror att Binero pysslar med sånt trams som Mono. ;)

/red. Och man hoppas att implementationen av det är säkert, eftersom det är fullständigt livsfarligt att ha det aktivt annars.

Medlem sedan maj 200010 687 inlägg
#9

Det går ju även att i koden kicka igång en egen tråd som ligger och gör saker i bakgrunden.
Kan ju kolla på BackgroundWorker.
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

Medlem sedan apr. 20007 588 inlägg
#10

Använd Windows Scheduler (en slags Win-motsvarighet till cron): Programs > Accessories > System Tools > Scheduled Tasks.

Medlem sedan juni 20014 421 inlägg
#11

Jag är på sgtpeppers sida. Det känns smartare att skapa en CLI-applikation som ligger och kollar av en mapp eller en databas ett par gånger i timmen, framförallt för att funktionen redan finns och för att den är vältestad. Det går även att programmatiskt lägga till nya jobb om man vill.

I win2k8 har den dessutom blivit väldigt mycket bättre än innan.

Medlem sedan feb. 2005280 inlägg
#12

Man kan göra på många sätt, men det enklaste tycker jag är att låta besöken agera trigger, dvs helt simpelt så har man ett datetime i sin DB som sätts för varje triggning, och sen kollar man för varje besökare om det är dags att köra sin scheduled kod (tex varje timme). Detta kräver dock att man har någorlunda jämn trafik till sajten, men ofta har man mer än man tror om man ser till alla botar som är ute o surfar, testa att logga alla requests i global.asax till en textfil så ser du.

Annars kan man använda sig av HttpCache, sätta ett delegat event som kör varje gång när cachen tajmar ut, och då i din scheduled kod så sätter du en ny httpcache med samma event osv, och om app poolen recyclar eller iis startas om av nån anledning så kan man starta om det hela i application_onstart, eller besökare som triggar

Medlem sedan jan. 20013 341 inlägg
#13

på Windows använder man sig av schemaläggaren, där man schemalägger en webbläsare till att startas, t ex:
C:\PROGRA~1\INTERN~1\iexplore.exe "http://www.minhemsida.se/letsdosomething.aspx"

Tror de flesta webbhotell erbjuder det som motsvarighet till cron

275 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)