Toon posts:

[C#] Global.asax.cs->'Object reference required..'

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik probeer een usertellertje in m'n .NET pagina's te integreren.....
Om dit te doen heb ik een Global.asax en een codebehind, Global.asax.cs aangemaakt en de .cs voorzien van o.m. de volgende code;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
namespace NET_test 
{
    public class Global : System.Web.HttpApplication
    {
        private int totalUsers, concurrentUsers;
        private System.ComponentModel.IContainer components;
        private System.Timers.Timer GlobalTimer;

        public int TotalUsers
        {
            get
            {
                return totalUsers;
            }
            set
            {
                totalUsers = value;
            }
        }
        public int ConcurrentUsers
        {
            get
            {
                return concurrentUsers;
            }
            set
            {
                concurrentUsers = value;
            }
        }
        protected void Application_Start(Object sender, EventArgs e)
        {
            
            totalUsers = 100;
            concurrentUsers = 0;
        }
 ....

Niet zo heel schokkend zou je zeggen, het gaat echter mis wanneer ik in een willekeurige pagina de waarden van bv. 'TotalUsers' probeer op te halen.
Wanneer ik in een willekeurige pagina in Page_Load(..) de volgende regel invoeg;
code:
1
StatusLabel.Text=Global.TotalUsers.ToString();

Dan krijg ik in plaats van de waarde van TotalUsers de foutmelding 'An object reference is required for the nonstatic field, method, or property 'NET_test.Global.TotalUsers'
Natuurlijk heb ik de F*$&$ search gebruikt maar kom er niet uit.. Iemand ?

Verwijderd

Topicstarter
Niemand ? :? :'(

  • tomato
  • Registratie: November 1999
  • Niet online
Doe eens niet na 26 minuten schoppen...

Verwijderd

Op dinsdag 11 december 2001 16:50 schreef Segunda@Tweakers het volgende:
...

'An object reference is required for the nonstatic field, method, or property 'NET_test.Global.TotalUsers'

...
Heb je wel een object reference gemaakt?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:38

TeeDee

CQB 241

Op dinsdag 11 december 2001 17:20 schreef tomato het volgende:
Doe eens niet na 26 minuten schoppen...
offtopic:
reageer dan gewoon ff niet |:(

ontopic:
Heb je al iets van een reference _naar_ dat object gemaakt!

Heart..pumps blood.Has nothing to do with emotion! Bored


  • tomato
  • Registratie: November 1999
  • Niet online
TeeDee:
offtopic:
reageer dan gewoon ff niet |:(
Ik ben van mening dat iemand die na 26 minuten een topic omhoogschopt er best op gewezen mag worden dat dit onzin is.
ontopic:
Heb je al iets van een reference _naar_ dat object gemaakt!
Reageer dan ook gewoon even niet als je niets constructief te melden hebt :Z


Mijn constructieve opmerking dan maar? Wat denk je met
code:
1
Global.TotalUsers

precies te doen? Probeer dat eens onder woorden te brengen, dan zul je zien dat je een foutje maakt.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:38

TeeDee

CQB 241

Ik ben van mening dat iemand die na 26 minuten een topic omhoogschopt er best op gewezen mag worden dat dit onzin is.
Mee eens, maar je geeft nu het antwoord. Had je evt. daarnet ook al kunnen doen.
Reageer dan ook gewoon even niet als je niets constructief te melden hebt :Z
Ik dacht dat ik constructief bezig was. Niet dus. Kan je ook anders zeggen!

Heart..pumps blood.Has nothing to do with emotion! Bored


  • tomato
  • Registratie: November 1999
  • Niet online
TeeDee: Mee eens, maar je geeft nu het antwoord. Had je evt. daarnet ook al kunnen doen.
Dat is waar, maar op een of andere manier verlies ik de behoefte snel te helpen als er zo getrokken wordt aan een antwoord.
Ik dacht dat ik constructief bezig was. Niet dus. Kan je ook anders zeggen!
Ik zie nu pas dat je post ongeveer gelijk geplaatst was met die van je voorganger. Ik zag het eerst als een dubbele opmerking, maar ok, hij was constructief.

Zou helemaal mooi zijn als Segunda@Tweakers zelf ook snel kan reageren :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Lijkt mij nogal duidelijk: in OO talen kan je methoden verdelen in instantie methoden en klasse-methoden. Instantie methoden werken op een instantie van een klasse, op een object dus. Klasse methoden (static) kan je gewoon aanroepen zonder een instantie van die klasse (= object) te hebben.

Jij roept een instantie-methode aan op een klasse. Dat gaat dus niet :) . Je moet een instantie van die klasse hebben. Waarschijnlijk kan je hierbij goed een Singleton gebruiken (een klasse waarvan slechts 1 instantie is of hoort te zijn).

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • tomato
  • Registratie: November 1999
  • Niet online
mbravenboer: Waarschijnlijk kan je hierbij goed een Singleton gebruiken (een klasse waarvan slechts 1 instantie is of hoort te zijn).
[off-topic]

In Ruby maak ik een singleton door de constructor private te maken en in een class variabele bij te houden of er een instance van de class is (en natuurlijk zelf een constructor aan te bieden, bijv .create). Deze manier is trouwens niet thread-safe.

Ik ben niet zo erg in to Java, maar doe je het daar op dezelfde manier? Ik meende van wel, maar kent Java zelf niet een manier om een singleton te maken (zonder dat dus zelf 'in te bouwen', of blijf je dat in alle OO talen doen)?

[/off-topic]

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
tomato: maak ik een singleton door de constructor private te maken en in een class variabele bij te houden of er een instance van de class is (en natuurlijk zelf een constructor aan te bieden, bijv .create). Deze manier is trouwens niet thread-safe.
Ik heb weleens naar Ruby gekeken, maar nog nooit echt goed. Als Ruby synchronized blocks heeft kan je de class variable private maken en de toegangsmethoden synchronized.
Ik ben niet zo erg in to Java, maar doe je het daar op dezelfde manier? Ik meende van wel, maar kent Java zelf niet een manier om een singleton te maken (zonder dat dus zelf 'in te bouwen', of blijf je dat in alle OO talen doen)?
In Java is er inderdaad ook geen ingebouwde voorziening, maar je kan het dus vrij gemakkelijk implementeren via een private constructor, een private singleton klasse-variabele en een synchronized singleton access-methode die eventueel de singleton lazy kan aanmaken :) . Pas was hier een topic over: [topic=318466/1/25]

Wellicht dat Singeltons weleens ingebouwd zouden kunnen gaan worden. Veel van de huidige -taal features zijn in feite ingebouwde 'design-patterns' uit vroegere talen :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Wow Damn !
Was niet online gisterenavond dus kon niet eerder reageren,
ff voor de duidelijkheid, sorry voor het omhoogschoppen, ik ben een enorme C# nOOb en zat wanhopig te kutten hiermee....

Anyway, ik heb vanochtend een boek (!) gekocht in het nederlands (!) want het wordt geloof ik wel enigzins complex. >:)
mbravenboer: ...
Lijkt mij nogal duidelijk: in OO talen kan je methoden verdelen in instantie methoden en klasse-methoden. Instantie methoden werken op een instantie van een klasse, op een object dus. Klasse methoden (static) kan je gewoon aanroepen zonder een instantie van die klasse (= object) te hebben.

Jij roept een instantie-methode aan op een klasse. Dat gaat dus niet. Je moet een instantie van die klasse hebben.
OK, snap ik maar eeuh, ik wilde graag een klasse maken die vanuit al m'n pagina's aanroepbaar was, en dus niet een instantie in elke pagina met in elke pagina een andere 'state'. Ik dacht dit te bereiken door deze klasse aan te maken in de global, maar da's misschien een denkfout...?
Waarschijnlijk kan je hierbij goed een Singleton gebruiken (een klasse waarvan slechts 1 instantie is of hoort te zijn).

In Ruby maak ik een singleton door de constructor private te maken en in een class variabele bij te houden of er een instance van de class is (en natuurlijk zelf een constructor aan te bieden, bijv .create). Deze manier is trouwens niet thread-safe.

Ik ben niet zo erg in to Java, maar doe je het daar op dezelfde manier? Ik meende van wel, maar kent Java zelf niet een manier om een singleton te maken (zonder dat dus zelf 'in te bouwen', of blijf je dat in alle OO talen doen)?
:? Hier raak ik het ff kwijt maar, wat verder graafwerk heeft me inmiddels wel het het volgende scriptje opgeleverd:
public class Global : System.Web.HttpApplication
{
protected static int m_ActiveUsers;
public static int ActiveUsers
{
get { return m_ActiveUsers; }
}
protected void Application_Start(Object sender, EventArgs e)
{
Application.Lock();
m_ActiveUsers = 0;
Application.UnLock();
}
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
++m_ActiveUsers;
Application.UnLock();
}
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
--m_ActiveUsers;
Application.UnLock();
}
... met een static property dus, werkt als de brandweer !
Bedankt voor de tips Heren ! :9

namespace Guru's
{
public static Rule!
{
Tomato & mbravenboer ;)
}
}

Verwijderd

Topicstarter
Ik snap het static declareren van memberfuncties nu maar het is ongeveer de halve oplossing voor wat ik van plan was. >:) Wat ik eigenlijk graag wil doen is iets als het volgende bakken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using System.Web.Mail;

namespace NET_test 
{
    public class Global : System.Web.HttpApplication
    {
        private System.Timers.Timer MailTimer;
        protected void Application_Start(Object sender, EventArgs e)
        {
            Application.Lock();
            this.MailTimer = new System.Timers.Timer();
            ((System.ComponentModel.ISupportInitialize)(this.MailTimer)).BeginInit();
            // 
            // MailTimer
            // 
            this.MailTimer.Enabled = true;
            this.MailTimer.Interval = 6000;
            this.MailTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.MailTimer_Elapsed);
            ((System.ComponentModel.ISupportInitialize)(this.MailTimer)).EndInit();
            
            
        }
        
        private void MailTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Application.Lock();
            MailMessage msgMail = new MailMessage();

            msgMail.To = "ikke@thuis.nl";
            msgMail.From = "root@194.178.67.2";
            msgMail.Subject = "Attachment Test";

            msgMail.BodyFormat = MailFormat.Text;
            msgMail.Body = DateTime.Now.ToString();
            msgMail.Attachments.Add(new MailAttachment(Server.MapPath("UserCountDisplay.aspx")));

            SmtpMail.Send(msgMail);
            Application.UnLock();
        }
    }
}

Een global.asax dus die een timer bevat eens in de zoveel tijd een event schopt en mailtjes gaat sturen. In een willekeurige .aspx pagina draait dit scriptje prachtig maar, in de global lijkt er niets te gebeuren.
Ik krijg geen foutmelding maar het event MailTimer_Elapsed wordt nooit gefired.... |:(

Het liefst zou ik e.a. natuurlijk zo uit bouwen dat het mailtimer-object als globaal, static, klasse-methode gebasseerde ding definieeren, zodat ik het vanuit een websiteje kan instellen/besturen....

Kan een van jullie goeroes mij misschien nog een keer een schop in de goeie richting geven ? Tnx !
Pagina: 1