私は、ASP.NET、つまりMySQL、Oracleなどの異なる(SessionState、Profileなど)プロバイダをテストするプロトタイププログラムで作業しています。 MySQLプロバイダ私はプロバイダ、SessionStateContainer、およびSessionState自体をインスタンス化することができたばかりです。手動でインスタンス化されたSessionStateプロバイダの問題
Type mySqlType = Type.GetType("MySql.Web.SessionState.MySqlSessionStateStore, MySql.Web, Version=6.6.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d", true, true);
SessionStateStoreProviderBase provider = (SessionStateStoreProviderBase)Activator.CreateInstance(mySqlType);
System.Collections.Specialized.NameValueCollection providerConfig = new System.Collections.Specialized.NameValueCollection();
providerConfig.Add("connectionStringName", "LocalMySqlServer");
providerConfig.Add("applicationName", "/");
providerConfig.Add("autogenerateschema", "True");
providerConfig.Add("enableExpireCallback", "False");
provider.Initialize("MySqlSessionStateProvider", providerConfig);
HttpContext context = new HttpContext(
new HttpRequest("fake", "http://localhost:14359", ""),
new HttpResponse(new StringWriter()));
SessionStateStoreData storeData = provider.CreateNewStoreData(context, 100);
System.Web.SessionState.HttpSessionStateContainer sessionStateContainer =
new System.Web.SessionState.HttpSessionStateContainer(
"mySession",
storeData.Items,
storeData.StaticObjects,
100,
true,
System.Web.HttpCookieMode.UseDeviceProfile,
SessionStateMode.Custom,
false
);
Type sessionStateType = Type.GetType("System.Web.SessionState.HttpSessionState, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
HttpSessionState sessionState =
(HttpSessionState)sessionStateType
.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(IHttpSessionState) }, null)
.Invoke(new object[] { ssessionStateContainer });
provider.InitializeRequest(context);
すべては私が作成したセッションでは、いくつかの値を書き込むことができるよと、正常に動作しているようだ、と私はそこからそれらを読むことができるよ:
sessionStateContainer.Add("SomeKey", "SomeValue");
var test = sessionStateContainer["SomeKey"];
Console.WriteLine("var test: " + test.ToString()); // outputs "var test: SomeValue"
sessionState.Add("AnotherKey", "SomeOtherValue");
var test2 = sessionState["AnotherKey"];
Console.WriteLine("var test2: " + test2.ToString()); // outputs "var test2: SomeOtherValue"
// End the request
provider.EndRequest(context);
ここに来ます興味深い部分 - DB内のmy_aspnet_sessions
テーブルを調べると、そこには何もありません。
私はデータが書かれているか、何か間違っているのでしょうか?
更新:
この問題は、もはやブロッカーですが、私はまだ知って興味ないし、誰もがそれを試しを与えるためにアップしている場合は、ここで私が使用したconnectionString
です:
<connectionStrings>
<remove name="LocalMySqlServer" />
<add name="LocalMySqlServer" connectionString="server=localhost;database=session_test;User Id=user;password=pass" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
MySQL Connector NETも必要です。あなたのweb.configファイルで
新しい '.Invoke(新しいオブジェクト[] {ssessionStateContainer}を作成することによって、この行のデータを消去することができます。これ、あなたのような何かを実行する必要があり、データベースにセッションデータを参照するために与えられ
); 'あなたがコードをステップ実行したときに何が起きるのですか? – MethodMan
2つのスニペットは私のコードで同じ順序です。データの書き込みは 'sessionState'のインスタンス化後に行われるので、どのようにクリアできるのか分かりません。コードをステップ実行すると、対応するプロパティで 'SomeKey'と' AnotherKey'キーを見ることができますが、それ以上のものはありません。 – Havelock