Toon posts:

[C#] Sessievariabelen in Webservice

Pagina: 1
Acties:

Verwijderd

Topicstarter
In dit topic: [rml][ C#] Sessievariabelen in Webservice[/rml]

wordt hier ook over begonnen. Ik wil dus serverside sessies bijhouden. Ik gebruik daar de volgende code voor om het te testen:

code:
1
2
3
4
5
6
7
8
9
10
[WebMethod(true)]
public void TestSet () 
{
    Session["Test"] = "test";
}
[WebMethod(true)]
public string TestGet () 
{
    return Session["Test"].ToString();
}

Als ik dan eerst TestSet aanroep vanuit de webapplicatie krijg ik nog geen error. Als ik daarna TestGet aanroep, krijg ik deze error:

Exception Details: System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of an object. at WebServiceSupport.Main.TestGet() in c:\inetpub\wwwroot\websupportservice\main.asmx.cs:line 209 --- End of inner exception stack trace ---

Dus dit betekent dat Session["Test"] niet is ingesteld. Ik heb op GoT verder geen topics kunnen vinden. Op google kon ik alleen maar topics vinden over client-side sessies, maar dat heb ik dus nu niet nodig.

Ik wil uiteindelijk bijhouden dat als een gebruiker inlogt, ik m.b.v. sessies serverside bijhoudt wat het gebruikerstype is en zijn gebruikersnaam.

[ Voor 3% gewijzigd door Verwijderd op 16-09-2005 14:36 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:31
Je moet je webservice 'enablen' om session-state bij te houden. Dit doe je dmv de EnableSession property op de WebMethod attribute.

Ben je er ook zeker van dat de naam van de sessie-variable identiek hetzelfde is (hoofd- en kleine letters ?).

[ Voor 31% gewijzigd door whoami op 16-09-2005 14:47 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op vrijdag 16 september 2005 @ 14:38:
Je moet je webservice 'enablen' om session-state bij te houden. Dit doe je dmv de EnableSession property op de WebMethod attribute.

Ben je er ook zeker van dat de naam van de sessie-variable identiek hetzelfde is (hoofd- en kleine letters ?).
Dat heb ik... Ik heb er WebMethod(true) staan. WebMethod(EnableSession=true) werkt ook niet. Ik heb er alleen true staan, aangezien dat in het door mij genoemde topic staat :).

@Edit: Jeps. Als ik bijv. Session["1"] kies, krijg ik dezelfde error.

[ Voor 8% gewijzigd door Verwijderd op 16-09-2005 14:48 ]


Verwijderd

Topicstarter
Dit heb ik ook gevonden, maar dat hielp ook niet... Zelfs als ik de twee methoden (TestSet en TestGet) na elkaar aanroep, krijg ik de nullpointerexpection.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 19:21

curry684

left part of the evil twins

Ik heb hier een webservice nagekeken waarin het al een jaar probleemloos gebruik, en iets anders dan EnableSession=true doe ik er ook niet mee. Hebben we het over ASP.NET 1.1?
Verwijderd schreef op vrijdag 16 september 2005 @ 15:15:
Dit heb ik ook gevonden, maar dat hielp ook niet... Zelfs als ik de twee methoden (TestSet en TestGet) na elkaar aanroep, krijg ik de nullpointerexpection.
Maar maak je wel die CookieContainer aan aan de clientkant, anders werk je cookieloos en dan gaan je sessions idd niet echt werken...

Dus zo:
C#:
1
2
3
4
MyService myService = new MyService();
myService.CookieContainer = new CookieContainer();
myService.TestSet();
myService.TestGet();

Zou perfect moeten werken.

[ Voor 71% gewijzigd door curry684 op 16-09-2005 15:31 ]

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op vrijdag 16 september 2005 @ 15:27:
Ik heb hier een webservice nagekeken waarin het al een jaar probleemloos gebruik, en iets anders dan EnableSession=true doe ik er ook niet mee. Hebben we het over ASP.NET 1.1?

[...]

Maar maak je wel die CookieContainer aan aan de clientkant, anders werk je cookieloos en dan gaan je sessions idd niet echt werken...

Dus zo:
C#:
1
2
3
4
MyService myService = new MyService();
myService.CookieContainer = new CookieContainer();
myService.TestSet();
myService.TestGet();

Zou perfect moeten werken.
Inderdaad, ASP.NET 1.1. Kun jij een stukje client- & servercode pasten?

Ik heb het zo gedaan:

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
protected CookieContainer cc = new CookieContainer();
protected webService.Main w = new Main();

private void Page_Load(object sender, System.EventArgs e)
{
    Session["main"] = w;
    Session["cc"] = cc;
    w.CookieContainer = cc;
}

private void SetButton_Click(object sender, System.EventArgs e)
{
    Main w =(Main) Session["main"];
    CookieContainer cc = (CookieContainer) Session["cc"];
    w.CookieContainer = cc;
    w.TestSet();
    this.ShowMessage(w.TestGet());
}

private void GetButton_Click(object sender, System.EventArgs e)
{
    Main w =(Main) Session["main"];
    CookieContainer cc = (CookieContainer) Session["cc"];
    w.CookieContainer = cc;
    this.ShowMessage(w.TestGet());
}

SetButton_Click werkt wel, krijg dan de goede string terug. Echter, als ik daarna GetButton_Click aanroep, krijg ik weer de nullpointer-exception. En dat moet juist werken...

[ Voor 3% gewijzigd door Verwijderd op 16-09-2005 15:35 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 19:21

curry684

left part of the evil twins

Bliep wtf doe je allemaal 8)7

Tip: je page wordt bij iedere pageview opnieuw geinstantieerd. En dus je cookiecontainer ook.

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op vrijdag 16 september 2005 @ 15:42:
Bliep wtf doe je allemaal 8)7

Tip: je page wordt bij iedere pageview opnieuw geinstantieerd. En dus je cookiecontainer ook.
Ik heb het van een site via google, daar werkte het wel...

Hier dus
Mijn code ziet er inderdaad iets anders uit, maar zoals het daar staat had ik ook al geprobeerd... Waarom wordt mijn cc bij elke page_load opnieuw geinitialiseerd? Alleen bij de constructor wordt ie new gemaakt, in de page_load staat alleen dat de session wordt geset. Als ik dit alles weghaal, werkt het ook niet... Ik weet nu niet waar het probleem ligt, ik neem aan server side... Moet ik daar, op EnableSession=true, verder niets instellen?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 19:21

curry684

left part of the evil twins

Werkt dat geisoleerde stukje dat ik hierboven gaf nu wel of niet?
C#:
1
2
3
4
webService.Main myService = new webService.Main();
myService.CookieContainer = new CookieContainer();
myService.TestSet();
myService.TestGet();

Die dus. Als dit niet werkt is het iets serverside, maar dat ziet ook gewoon goed uit eigenlijk.

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op vrijdag 16 september 2005 @ 16:03:
Werkt dat geisoleerde stukje dat ik hierboven gaf nu wel of niet?
C#:
1
2
3
4
webService.Main myService = new webService.Main();
myService.CookieContainer = new CookieContainer();
myService.TestSet();
myService.TestGet();

Die dus. Als dit niet werkt is het iets serverside, maar dat ziet ook gewoon goed uit eigenlijk.
Ho, sorry, dat werkte dus wel :). Vergeten te melden.

Echter, als ik dus gebruik maak van twee functies (eerst setten en vervolgens getten) werkt het niet meer...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 19:21

curry684

left part of the evil twins

Probeer het eens zo:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
webService.Main     Main;

private void Page_Load(object sender, System.EventArgs e)
{
    if(Session["main"] == null)
    {
        main = new webService.Main();
        main.CookieContainer = new CookieContainer();
        Session["main"] = Main;
    }
}

private void SetButton_Click(object sender, System.EventArgs e)
{
    main = Session["main"] as Main;
    main.TestSet();
}

private void GetButton_Click(object sender, System.EventArgs e)
{
    main = Session["main"] as Main;
    this.ShowMessage(main.TestGet());
}

Professionele website nodig?


Verwijderd

Topicstarter
Je bent een engel! :*) _/-\o_

Het werkt nu. Maar wat is er nu verschillend aan?

Nu wordt idd niet bij elke pageload de Main geset, maar is dat alles? En nu wordt het typecasten iets anders gedaan, maar dat is het ook niet volgens mij.

/Edit: er staat 2x een typfoutje in :) Main moet dan main zijn.
Nogmaals bedankt B)

[ Voor 16% gewijzigd door Verwijderd op 16-09-2005 16:21 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 19:21

curry684

left part of the evil twins

curry684 schreef op vrijdag 16 september 2005 @ 15:42:
Tip: je page wordt bij iedere pageview opnieuw geinstantieerd. En dus je cookiecontainer ook.
;)

Professionele website nodig?


Verwijderd

Topicstarter
Ik vond mijn eerste code ook al een beetje vreemd... Naja, hij doet het nu in ieder geval :) Kan ik met een gerust hart het weekend in gaan ;). Is het misschien handig om in dat oude topic een link naar deze oplossing te zetten?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 19:21

curry684

left part of the evil twins

Die had een serverside probleem en dat was opgelost. Niet echt boeiend om het dan te gaan kicken voor een niet echt relevante oplossing voor dat probleem :)

Professionele website nodig?

Pagina: 1