L'obtention de la session .NET web ASMX-service
J'ai un ASMX webservice hébergé aux côtés de mon ASP.NET web app. Maintenant, j'ai besoin d'obtenir les utilisateurs de session dans le Webservice. Pour tester ce que j'ai fait cette méthode simple:
[WebMethod(EnableSession = true)]
public string checkSession()
{
return HttpContext.Current.Session["userid"].ToString();
}
Alors, tout d'abord je me connecter à mon application web, puis dans le navigateur goto mon webservice et cliquez sur "checkSession" sur la génération automatique d'une page de test. J'ai testé sur 3 ordinateurs. Tous les 3 de ces travaux bien avec la webapp(si les séances sont en cours de création, etc), et 2 de ces renvoyer la valeur de la Session["userid"] sur l'invocation de la webmethod, cependant le dernier ordinateur renvoie "la référence d'Objet n'est pas définie à une instance d'un objet" étant donné que la Session est null.
Alors, quelle est la différence entre ces ordinateurs et pourquoi mon ASP.NET app obtenir les sessions de formation sur tous les ordinateurs, mais le webservice cant?
Je n'ai pas réellement le savoir. Tous les im faire est que, quand ils ont d'abord vous connecter sur le ASP.NET côté, j'ai mis: Session["userid"] = theiridfromdb; tout d'Abord, comment puis-je vérifier si son proc, et alors comment pourrais-je exécuter le webservice dans le même pool d'applications? Oui, cet ordinateur est toujours en donnant l'erreur.
Il ressemble à inproc est la valeur par défaut, donc, oui, je l'utilise. Je suis en cours d'exécution de cet arrêt d'un serveur dédié de course IIS6, et la ASP.NET le site et le service sont d'une seule application. Comme ils sont de la même application dans IIS et Visual Studio compile à la fois de leur backend de la même DLL.
Voir ce post: Session activé les services web - devhood.com/messages/message_view-2.aspx?thread_id=50261
Sur une autre note - vous ne devriez pas appeler ToString() sur un objet qui pourrait être null Doit vérifier la valeur null en premier.
OriginalL'auteur Matt | 2010-07-21
Vous devez vous connecter pour publier un commentaire.
c'est peut-être trop tard, mais avez-vous essayé ceci:
OriginalL'auteur Pietro Allievi
Id de session sont stockés comme des cookies sur le navigateur du client par défaut (Vue D'Ensemble De L'État De Session). Afin de vérifier si le cookie est créé correctement sur le problème de l'ordinateur. Peut-être que les cookies sont désactivés pour une raison quelconque? Dans ce cas, il ne serait pas l'envoi de l'id de session sur le serveur lorsque vous frapper que service web.
OriginalL'auteur kukabuka
Pouvez-vous vérifier le nombre de processus de travail est de votre application à l'aide d'? Vous pouvez le vérifier dans votre Application paramètres de pool dans IIS.
Si plus d'un processus de travail sont en train d'être utilisé, il est appelé à être en cours d'exécution d'un jardin web. Si c'est le cas, alors proc session ne sera pas utile que cette session n'est pas partagé entre les processus de travail. Jetez un oeil à http://www.west-wind.com/weblog/posts/2005/Apr/20/Why-you-shouldnt-use-InProc-Session-State-in-ASPNET
OriginalL'auteur dicemaster
Avez-vous Session désactivé dans IIS, ce serait plus de la règle .net.
Jetez un oeil à cette http://technet.microsoft.com/en-us/library/cc732964(v=ws.10).aspx - il vous indique comment désactiver la session, mais montre où pour vérifier le réglage.
Merci
Fran
OriginalL'auteur Fran Hoey
Par défaut, les web services sont, et doivent être apatrides. Toutefois, si vous devez utiliser des informations de session, assurez-vous d'utiliser le marqueur interfaces IReadOnlySessionState et IRequiresSessionState pour l'accès, l'utilisation, ou de modifier les informations d'état de session dans le webservice.
OriginalL'auteur DRobertE
meilleure façon de le faire cette approche vérifier avant votre session n'est pas null, et de l'autre côté, vous
initialiser la session sélectionnée avec votre valeur, et puis, quand et où le service web de travail avec httpcontext.actuel.session ont de la valeur !
les services web sont des apatrides, et le meilleur moyen est d'obtenir la valeur de service web au lieu de définir ou d'initialiser la valeur de session
OriginalL'auteur soheil bijavar
Service Web par défaut, l'habitude de la Session d'assistance. Vous devez explicitement spécifier le paramètre de la méthode web attribut
Ces deux choses pour moi
<add name="Session"
en vertu detype="System.Web.SessionState.SessionStateModule"/>
<httpModules>
enableSessionState="true"
dans<page>
tag1 et 2 ; Faire la 1ère étape & puis activer sessionState dans la page (etape 2)
OriginalL'auteur panky sharma