tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

【C#、ASP.NET】SQL Serverでセッション管理する

f:id:tekitoumemo:20180316021210p:plain
ほぼ完成した。公開まであと少し。

ASP.NETのセッション方法はいくつかあるのですが、今回はインメモリ OLTP でセッション管理を行う方法を紹介します。以下を参考にしました。
blogs.technet.microsoft.com

インメモリ OLTP とは

正直、僕もよくわかってないのですが、データベースのメモリ最適化を行うための手法みたいです。まぁ勝手に最適化してくれて早くなったという感じでしょうか。
インメモリ OLTP (インメモリ最適化) | Microsoft Docs

まずMicrosoft.Web.SessionState.SqlInMemoryをNugetから取得します。
f:id:tekitoumemo:20180316022331p:plain

取得するとプロジェクト直下に「ASPStateInMemory.sql」というクエリが作成されるのでこちらをSQLServerで実行します。FileNameのところがDドライブの指定になってるので、環境に合わせて実行してください。あえて指定しなくてよいと思うので、削除しちゃってよい思います。

CREATE DATABASE [ASPStateInMemory]
ON PRIMARY (
	   NAME = ASPStateInMemory, FILENAME = '{ここまでののパス}\ASPStateInMemory_data.mdf'
),
FILEGROUP ASPStateInMemory_xtp_fg CONTAINS MEMORY_OPTIMIZED_DATA (
	   NAME = ASPStateInMemory_xtp, FILENAME = '{ここまでののパス}}\ASPStateInMemory_xtp'
)
GO

Web.ConfigのsessionStateも自動で書き換わるのですが、以下の項目を環境に合わせて変更します。

<sessionState mode="Custom" customProvider="SqlInMemoryProvider">
    <providers>
        <add name="SqlInMemoryProvider" type="Microsoft.Web.SessionState.SqlInMemoryProvider" connectionString="data source=sqlserver;initial catalog=ASPStateInMemory;User ID=user;Password=password;" />
    </providers>
</sessionState>
  • data source : サーバー名
  • catalog:カタログ名
  • User ID:SQL ServerのユーザーID
  • Password:SQL Serverのパスワード

これでセッション管理を行うとSessionsテーブルにデータが保存されるようになります。
めっちゃ簡単だねこりゃ。