Rendre statefull un web service

Contenu du snippet

Un Web Service est par défaut stateless, voici comment très simplement le rendre statefull.
Article inspiré par une question longtemps restée sans réponse dans le forum.

Pourquoi mon Web Service suivant ne veut il pas accumuler les caractères ?
public class Test : System.Web.Services.WebService
{
private string strCont;

[ WebMethod(Description="Ajout de caractères"]
public string Ajout(string s)
{
strCont += s;
return strCont ;
}

En fait : un web service est stateless.
Il n'est pas capable d'identifier un client

Une "mauvaise solution" serait de rajouter le modificateur "static" :
private static string strCont;
Ainsi, on aurait un comportement d'accumulation... mais n'isolant pas chaque client...

Source / Exemple :


//voici la version proposée de ce Web Service 
//Elle s'appuie sur le concept de Session d'IIS : EnableSession=true est important !

public class Test : System.Web.Services.WebService
{
	private string strCont;

[ WebMethod(Description="Ajout de caractères", EnableSession=true)]
public string Ajout(string s)
{
	if (Session["strCont"] != null)
	{
		strCont = Session["strCont"].ToString();
	}
	else
	{
		strCont = "";
	}
	strCont += s;
	Session["strCont"] = strCont;
	return strCont ;
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.