2008-09-26 7 views
10

Je viens d'écrire mon premier service Web, donc supposons que ma connaissance du service web est inexistante. Je veux essayer d'appeler une fonction dbClass à partir du service Web. Cependant j'ai besoin de quelques paramètres qui sont dans la session. Est-il possible que je peux obtenir ces appeler ces variables de session du webservice ??Variables de session et services Web

Répondre

20

Si vous utilisez des services Web ASP.NET et que vous voulez d'avoir un environnement de session maintenu pour vous, vous devez embellir votre méthode de service Web avec un attribut indiquant que vous avez besoin d'une session.

[WebMethod(EnableSession = true)] 
public void MyWebService() 
{ 
    Foo foo; 
    Session["MyObjectName"] = new Foo(); 
    foo = Session["MyObjectName"] as Foo; 
} 

une fois que vous avez fait cela, vous pouvez accéder à la session des objets similaires à ASPX.

Metro.

+0

Cela semble fantastique. Ma compréhension, cependant, est que les clients du service Web devront soit renvoyer un cookie soit être en mesure de répondre à un message 302 Found en redirigeant. – froggythefrog

+0

Vous pouvez créer un conteneur de cookies et le connecter à votre proxy de service Web. Il conservera ensuite tous les cookies renvoyés, y compris le cookie de session ASP.net. Si vous avez d'autres proxies qui fonctionneront dans la même session, vous pouvez également partager le conteneur de cookies avec eux. – Metro

0

Peut-être que cela fonctionnera HttpContext.Current.Session [ "Nom] Ou bien vous pourriez avoir à prendre dans certains paramètres ou de les stocker dans une base de données

3

En général, les services Web ne doivent pas s'appuyer sur des données de session. Considérez-les comme des méthodes ordinaires: les paramètres entrent en jeu et une réponse en ressort.

+0

Pourquoi pas? J'essaie de mettre en place une certaine sécurité, lorsqu'un utilisateur se connecte avec succès à mon application Web. J'ai défini une variable de session pour m'assurer que l'utilisateur appelant la méthode a bien été connecté à mon application Web. avoir les privilèges corrects, est-ce mauvais? Quelle est la bonne façon d'atteindre mon objectif? – EaziLuizi

+1

En règle générale, chaque client reçoit un jeton auquel il doit se raccrocher.Ensuite, il enverrait ce jeton avec chaque requête en tant qu'en-tête, chaîne de requête ou corps de formulaire pour s'authentifier. –

0

Votre question est un peu vague, mais je ferai de mon mieux pour y répondre.

Je suppose que vos variables de session existent sur le serveur qui effectue l'appel de service Web, et non sur le serveur qui héberge le service Web. Dans ce cas, vous devrez transmettre les valeurs nécessaires en tant que paramètres de vos méthodes de service Web.

5

Vous devez éviter d'augmenter la complexité de la couche de service en ajoutant des variables de session. Comme quelqu'un l'a déjà fait remarquer, pensez aux services Web comme des méthodes isolées qui prennent tout ce qui est nécessaire pour effectuer la tâche à partir de leur liste d'arguments.

1

si vous souhaitez utiliser Session ["nom d'utilisateur"]. ToString(); comme dans les autres pages C# derrière ASPX alors vous devez simplement remplacer [WebMethod] au-dessus de la méthode WebService avec [WebMethod (EnableSession = true)]

grâce à :) Metro

0

Pour utiliser session webservice nous devons suivez 2 étapes:

  1. Utilisez l'attribut [WebMethod (EnableSession = true)] sur la méthode.
  2. Session ["Nom"] = 50 (quoi que vous souhaitiez enregistrer) Veuillez vérifier l'exemple suivant.
 
[WebMethod(EnableSession = true)] 
public void saveName(string pname) 
{ 
    Session["Name"] = pname; 

}