[Mono-list] Troubles with Session in Web Services, client side

Sébastien Mosser mosser at polytech.unice.fr
Tue Dec 26 07:30:45 EST 2006


Hi everybody.

I got a problem while trying to invoke a WS written in C#. the WS is
quite simple, and is just a sample of 'How to use Session in .Net Web
Services : A Simple Session Counter'.

The Web User interface works fine (counter value changes well), but,
when I invoke it from a C# client, it doesn't :'(

The following problem happend on my iBook (Mac OS X, Mono 1.2.1) and
on my desktop (Kubuntu, mono 1.1.13.6), even using xsp or xsp2 as Web
Server, ans mcs or gmcs as compiler ...

WS Source code is the following :
petitroll at bartimeus:~/Adore/webservices/sandbox/session_counter$ cat
SessionCounter.asmx
<%@ WebService Language="C#" Class="Adore.WebServices.SandBox.SessionCounter"%>
/**
 * Test Web Service : Test usage of Session in .Net Web Services !
 * @author Sebastien Mosser
 * @date 2006.12.23
 */
using System;
using System.Web.Services;
using System.Xml.Serialization;
namespace Adore.WebServices.SandBox
{
  [WebService( Namespace="http://rainbow.essi.fr/Adore4ws/",
               Description="A quite simple service using session") ]
  public class SessionCounter: System.Web.Services.WebService
  {
    public SessionCounter() {}
    [WebMethod( Description="Reseting the session counter value",
                EnableSession=true)]
    public void ResetValue() { Session["counter"] = 0; }
    [WebMethod( Description="Increment by one the session counter",
                EnableSession=true)]
    public void Increment() {
     if (Session["counter"] == null)
       ResetValue();
      int i = (int) Session["counter"] ;
      Session["counter"] = i+1;
    }
   [WebMethod( Description="Get the session counter internal value",
               EnableSession=true)]
    public int GetValue() {
     if (Session["counter"] == null)
       ResetValue();
     return ((int) Session["counter"] ) ;
    }
  }
}

Client code is :
petitroll at bartimeus:~/Adore/sandbox/DotNetWSClients/SessionCounter$ cat Test.cs
/** A simple SessionCounter Test
 * @author Sebastien
 */
using System;
namespace Adore.WsClient.SessionCounterTest
{
  public class Test
  {
    public static void Main()
    {
      Console.WriteLine("####");
      Console.WriteLine("## SessionCounter.asmx .Net Client");
      Console.WriteLine("####");
      SessionCounter stub = new SessionCounter();
      Console.WriteLine("## Session Counter Value : " + stub.GetValue());
      Console.WriteLine("## Incrementing counter 15 times");
      for (int i = 0; i < 15; i++) {
	Console.WriteLine("## Invoking 'SessionCounter::Increment()'");
	stub.Increment();
      }
      Console.WriteLine("## Session Counter Value : " + stub.GetValue());
    }
  }
}

Execution provide the following result, which is not ... normal :'( :

petitroll at bartimeus:~/Adore/sandbox/DotNetWSClients/SessionCounter$ make run

dowmnloading WSDL contract, generate .Net Stub class
wsdl "http://localhost:9000/sandbox/session_counter/SessionCounter.asmx"
Mono Web Services Description Language Utility
Writing file 'SessionCounter.cs'
mcs /out:Test.exe /r:System.Web.Services *.cs
mono Test.exe
####
## SessionCounter.asmx .Net Client
####
## Session Counter Value : 0
## Incrementing counter 15 times
## Invoking 'SessionCounter::Increment()'
[ ... snipped 13 times ... ]
## Invoking 'SessionCounter::Increment()'
## Session Counter Value : 0
petitroll at bartimeus:~/Adore/sandbox/DotNetWSClients/SessionCounter$

does anybody got an idea ? I think I'm missing something obvious ...

Cheers,

-- 
 Sebastien Mosser


More information about the Mono-list mailing list