web-dev-qa-db-fra.com

mode d'état de session asp.net "SQLServer"

"Mon site Web est LIVE. Et ce problème est lié à la configuration du délai de session sur le serveur LIVE et non pas sur localhost."

J'ai un problème avec la session expirant trop tôt. lien en 2-5 minutes seulement. J'ai essayé beaucoup de choses et j'ai finalement décidé de stocker la session en mode "SQL Server"

dans mon fichier web.config, j'ai le code suivant:

<sessionState mode="SQLServer" cookieless="false" timeout="45"
sqlConnectionString="data source=xxx.xx.xx.xxx;uid=xxxxxxx;pwd=xxxxxxxx"/>

et j'ai toutes les tables requises dans la table ASPState sur le serveur. Vous pouvez le voir à partir de l'image ci-dessous.

enter image description here

Mais quand je lance mon application, l'erreur suivante est générée:

"Impossible d'utiliser SQL Server, car soit l'état de session ASP.NET version 2.0 n'est pas installé sur le serveur SQL, soit ASP.NET n'est pas autorisé à exécuter la procédure stockée dbo.TempGetVersion. Si le schéma d'état de session ASP.NET n'est pas Si le schéma a été installé, accordez l’autorisation d’exécution sur la procédure stockée dbo.TempGetVersion à l’identité du pool d’applications ASP.NET ou à l’utilisateur Sql Server. spécifié dans l'attribut sqlConnectionString. "

Image de l'erreur:

enter image description here

Je ne suis pas capable de comprendre le problème exact et comment je peux le résoudre. Toute aide serait appréciée.

Je vous remercie

13
jackerj

Ouvrez "Programmabilité" dans votre arbre et vérifiez d’abord si dbo.TempGetVersion existe. Vous n'avez probablement pas installé le schéma approprié.

5
Pleun

Pour que cela fonctionne pour moi, j'ai exécuté la commande avec les options suivantes. 

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe -S . -E -ssadd -sstype p

Je crois que l'option -ssadd ("Ajoute la prise en charge de l'état de session en mode SQL Server.") Est ce qui l'a amenée à configurer correctement les procédures stockées. Voir ce link pour compléter la liste des options. 

31
Kenn

Peut-être que vous avez une mauvaise étiquette dans votre web.config

Un exemple correct devrait être:

<sessionState 
allowCustomSqlDatabase="true" 
mode="SQLServer" 
sqlConnectionString="data source=localhost;initial catalog=YourAspStateDatabase;user id=yourLogin;password=yourpassword" cookieless="false" timeout="30"/>
2
user2167048

Toutes ces informations sont extrêmement utiles, mais il existe quelques notes plus utiles en fonction de votre situation.

Si vous avez exécuté l'assistant, il ne s'exécutera pas avec l'indicateur -ssadd. L'indicateur -ssadd est ce qui crée la procédure dbo.TempGetVersion et d'autres procédures.

Si vous allez sur un serveur/une base de données personnalisé, vous voudrez exécuter le programme comme suit ...

aspnet_regsql.exe -S YourServerName -d YourDatabaseName -ssadd -E -sstype c
  • -S est l'indicateur de votre nom de serveur
  • -D est le drapeau de votre nom de base de données
  • -ssadd Ajoute le support pour l'état de session en mode SQLServerm. Exécutez -ssremove si vous devez supprimer les procédures.
  • -E utilise les informations d'identification Windows actuelles pour se connecter à la base de données cible pour configurer les éléments.
  • -sstype c indique qu'il s'agit d'un nom de base de données personnalisé.
1
Jason Geiger

J'étais coincé avec cela et aucune des réponses ne fonctionnait pour moi, juste au cas où quelqu'un d'autre aurait ce problème, c'est ce qui a résolu mon problème, je me suis lancé dans le cmd:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe -C "Data Source=.\SQL2012;Integrated Security=True" -ssadd

Juste au cas où quelqu'un d'autre se retrouverait dans la même situation que moi.

0
Rolando Retana