Asp.Net 4.0 Хранение сессии в SqlServer - PullRequest
2 голосов
/ 13 сентября 2011

У меня есть база данных, предоставляемая хостингом.Я хочу сохранить сеанс на сервере sql, но он выдаст мне ошибку:

Unable to use SQL Server because ASP.NET version 2.0 Session State is not installed on the SQL server. Please install ASP.NET Session State SQL Server version 2.0 or above

[HttpException (0x80004005): Unable to use SQL Server because ASP.NET version 2.0 Session State is not installed on the SQL server. Please install ASP.NET Session State SQL Server version 2.0 or above.]
System.Web.SessionState.SqlPartitionInfo.GetServerSupportOptions(SqlConnection sqlConnection) +2147087
System.Web.SessionState.SqlPartitionInfo.InitSqlInfo(SqlConnection sqlConnection) +107
System.Web.SessionState.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo, TimeSpan retryInterval) +531
System.Web.SessionState.SqlSessionStateStore.GetConnection(String id, Boolean& usePooling) +237
System.Web.SessionState.SqlSessionStateStore.CreateUninitializedItem(HttpContext context, String id, Int32 timeout) +136
System.Web.SessionState.SessionStateModule.CreateUninitializedSessionState() +50
System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData) +659
System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +96
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

Мой WebConfig включает следующее заявление.

    <sessionState mode="SQLServer"
      cookieless="true"
      regenerateExpiredSessionId="true"
      timeout="30"
      allowCustomSqlDatabase="true"
      sqlConnectionString="Data Source=hostingServer;Initial         catalog=MyDatabase;User Id=MyUser;password=MyPassword;"
      stateNetworkTimeout="60"/>

Я запустил aspnet_regsql.exe.Он спросил меня о сервере и деталях входа в систему, после чего он создал aspNret_TableNames.

Пожалуйста, направьте меня.

1 Ответ

13 голосов
/ 19 октября 2011

Я полагаю, что вы использовали приложение aspnet_regsql.exe, которое затем запускает мастер, а затем добавляет в таблицы различные таблицы aspnet_ *.

Если это так, снова перезапустите тот же мастер, а затем выберите параметр удаления, чтобы удалить все эти таблицы из базы данных.

Теперь запустите эту команду:

aspnet_regsql.exe -ssadd -d <Your Database> -sstype c -S <Server> -U <Username> -P <Password>

Это добавит две таблицы в вашу базу данных, а именно: ASPStateTempApplications & ASPStateTempSessions.

Измените файл web.config, включив в него следующую конфигурацию:

<sessionState
    mode="SQLServer"
    allowCustomSqlDatabase="true"
    sqlConnectionString="Data Source=Server;Initial Catalog=Database;User ID=UserId;Password=Password"
    cookieless="false" timeout="20" />

Примечание: 1. Я предположил, что вы хотите сохранить сеанс в базе данных ваших приложений. Если вы хотите поддерживать базу данных сеанса отдельно, выполните указанную выше команду без параметра "-d". Это создаст новую базу данных ASPState с двумя таблицами, которые я указал выше. И, наконец, вы можете указать имя этой базы данных в вашей конфигурации.

Надеюсь, это поможет:)

...