[Mono-list] WebService, SessionState and CookieContainer

Lluis Sanchez lluis@ximian.com
Mon, 26 Jul 2004 17:04:09 +0200


Valentina:

You already reported this bug and it has already been fixed. You only
need to wait for the next Mono release or compile it yourself from CVS.
There is no need to send this bug report over and over on all mono
lists.

Thanks,
Lluis.


On dl, 2004-07-26 at 16:46, beniniva@csr.unibo.it wrote:
>  Hi,
> I try to run a simple example of stateful web service. This example run well on
> windows with Explorer but no on Mono with Apache, why?
>  
> In order to maintain stateful communication between a client application and a
> server application,I use session objects and the cookie container.
> On the Server I must explicitly enable session support for each Web service
> method that requires a session state ( [WebMethod ( EnableSession = true )] )
> On the Client application, I use cookie http with
> System.Web.SessionState.HttpSessionState and System.Net.CookieContainer
> classes.
> When the web service method uses a session state, a cookie is passed back to the
> Web Service client in the response header. That cookie uniquely identifies the
> session for that Web Service client.
> To receive that cookie for the web service client, a new instance of
> CookieContainer must be created and then assigned to the CookieContainer
> property before the Web service method is called. This make sure that the
> cookie is correctly included in subsequent requests. I must do this because I
> must store the cookies that are received in the session state for future
> retrieval by the session.
> The web services code is:Service1.asmx.cs
> --------------------------------
> using System;
> using System.Collections;
> using System.ComponentModel;
> using System.Data;
> using System.Diagnostics;
> using System.Web;
> using System.Web.Services;
> ...
> ...
> ...
> [ WebMethod(Description="Per session Hit Counter",EnableSession=true)]
>       public int SessionHitCounter()  
>       {
>     if (Session["HitCounter"] == null)  
>     {
>        Session["HitCounter"] = 1;
>     }
>     else  
>     {
>        Session["HitCounter"] = ((int) Session["HitCounter"]) + 1;
>     }
>     return ((int) Session["HitCounter"]);
>       }    
> --------------------------------
>  
> The client application code is:WebForm1.aspx.cs
> --------------------------------
> using System;
> using System.Collections;
> using System.ComponentModel;
> using System.Data;
> using System.Drawing;
> using System.Web;
> using System.Web.SessionState;
> using System.Web.UI;
> using System.Web.UI.WebControls;
> using System.Web.UI.HtmlControls;
> using System.Net;
> .....
> .....
>   // Create a new instance of a proxy class for your XML Web service.
>       private ServerUsage.Service1 su = new ServerUsage.Service1();
>       private CookieContainer cookieJar;
> ......
>   private void Button1_Click(object sender, System.EventArgs e)
>       {
>        
>      
>     // Check to see if the cookies have already been saved for this session.
>     if (Session["CookieJar"] == null)  
>        cookieJar= new CookieContainer();
>     else
>        cookieJar = (CookieContainer) Session["CookieJar"];
>  
>     // Assign the CookieContainer to the proxy class.
>     su.CookieContainer = cookieJar;
>  
>     // Invoke an XML Web service method that uses session state and thus
> cookies.
>     int count = su.SessionHitCounter();    
>  
>     // Store the cookies received in the session state for future retrieval by
> this session.
>     Session["CookieJar"] = cookieJar;
>  
>     // Populate the text box with the results from the call to the XML Web
> service method.
>     Label1.Text = count.ToString();  
>        
>  
>       }
> --------------------------------
> 
> I've mono 1.0 installed. 
> 
> Where I mistake?
> 
> Could anybody help me, please?
>  
> Thanks a lot,
>  
> Valentina.
> 	
> _______________________________________________
> Mono-list maillist  -  Mono-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list