2

我有一些 ASP.NET MVC 应用程序的生产 IIS 服务器。我遇到了一些我无法捕获的棘手错误。它链接到会话数据。如何导出/查看/查看此类用户会话?会话存储有默认的 IIS 配置——进程内。


编辑

顺便说一句,我有必要的适当用户会话 ID。


编辑2

好的,伙计们,即使我现在无法导出该数据,您能否指点我一些会话状态服务器或类似的东西,我可以使用它来存储会话数据并进一步查看它?我知道 SQL Server 可以,但是对于这样的问题来说它是非常沉重的。

4

3 回答 3

3

Chris 遵循他的想法,您可以编写一个例程,将会话对象的内容输出到文件(一种自定义日志)。

//Controller Action where you store some objects in session
public ActionResult Index()
{
    var myObj = new { strTest = "test string", dtTestValue = DateTime.Now, listTest = new List<string>() { "list item 1", "list item 2", "list item 3"  }};
    Session["test1"] = "Test";
    Session["test2"] = myObj;

    return View();

}

//Controller Action where you output session objects to a file 
[HttpPost]
public ActionResult Index(FormCollection form)
{
    //Routine to write each sessionObject serialized as json to a file 
    foreach (string key in Session.Keys)
    {
        var obj = Session[key];
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Public\CustomAspNetLog.txt", true))
        {
            file.WriteLine(DateTime.Now.ToString() + "\t" + serializer.Serialize(obj));
        } 
    }
    return View();
}

如果您需要经常调用该例程,您可以将它放在一些帮助类中,并在您需要时在控制器操作中调用它。然后,您可以在您认为必要的每个步骤中检查 Session 中的真实数据。

于 2012-12-18T10:43:44.327 回答
2

不,您需要编写一个例程来在需要时导出会话数据。

于 2012-12-18T09:09:17.780 回答
1

KSeen

存储会话比 StateServer (即分布式缓存提供程序)有更好的选择。

Alachisoft 提供完全免费的 NCache Express。您可以使用它来存储您的会话。这是您的操作方法。

在每台 Web 服务器上安装 NCache。定义分布式缓存:确保测试分布式缓存以确保其正常工作。修改 web.config 文件:添加 SessionState Provider 信息和刚刚创建的缓存的名称。

  <sessionState cookieless="false" regenerateExpiredSessionId="true"
   mode="Custom"
                customProvider="NCacheSessionProvider" timeout="1">
        <providers>
              <add name="NCacheSessionProvider"
                    type="Alachisoft.NCache.Web.SessionState.
                    NSessionStoreProvider"
                    cacheName="myreplicatedcache" 
        writeExceptionsToEventLog="false"
                    AsyncSession="false"/>
        </providers>
  </sessionState>

请注意,Version=3.2.1.0 应该与您下载的特定 NCache Express 版本相匹配。完成此操作后,您的 ASP.NET 应用程序就可以开始使用分布式会话了。

于 2012-12-21T12:46:35.367 回答