Rendre statefull un web service

5/5 (5 avis)

Snippet vu 15 481 fois - Téléchargée 31 fois

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

Ajouter un commentaire Commentaires
hbaradi Messages postés 16 Date d'inscription samedi 11 décembre 2004 Statut Membre Dernière intervention 31 octobre 2008
17 avril 2007 à 14:45
bonjour,
je voudrais savoir comment on pourrais gérer les sessions entre un client en C++ 2005 (pas de CookieContainer) et un WebService .Net.

Merci
theboboteam Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 23 décembre 2003
9 déc. 2003 à 13:51
absolument pas
mais pour l'instant, cela fonctionne comme je veux
je gere correctement les sessions du cote client (ds des WebService) sans crée de cookies null part
mais s'il y avais en avais besoin, la cela poserais quelques problemes
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
9 déc. 2003 à 13:03
uitilise tu le sessionstate :
cookieless=true
?
theboboteam Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 23 décembre 2003
9 déc. 2003 à 11:35
heu, je viens de tester et je n'ai aucun cookie qui a été crée lorsque j'ai utilisé ce service web ( testé avec l'interface de test et avec le webservice.htc ecrit en javascript)
nseveno Messages postés 21 Date d'inscription mardi 2 avril 2002 Statut Membre Dernière intervention 12 juin 2008
13 nov. 2003 à 16:54
Salut !

Petit complément : Tout ça marche bien sur l'interface de test. Sauf qu'après pour consommer le service Web, il faut autoriser le stockage du cookie de session dans l'application cliente.

Sous .NET, ça se fait bien :

proxy.CookieContainer = new CookieContainer()

avant d'invoquer le service...

Mais sur d'autres plateforme, ça peut être compliqué à utiliser...

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.