return 重定向功能后会话变量丢失

Session Variable Lost after return Redirect function

我有一个用于对值进行排序的 mvvm 网络应用程序 用户点击排序,元素中的以下代码将其作为参数发送到控制器,刷新页面。

<a href="@Url.Action("Sort", new { area = "Area", controller = "Controller", sorter = ViewModelListSorterValue.CREATEDATE_ASC })">

这是在return中的控制器中工作的函数。

Public ActionResult Sort(ViewModelListSorterValue sorter)
        {
            ViewModelListSort sortViewModel = new ViewModelListSort();
            sortViewModel.Value = sorter;
            HttpContext.Session["key"] = sortViewModel;

            return RedirectToAction("List");
        }

该代码应该通过使用同一控制器中的另一个函数从每个页面的会话中获取排序器的值来加载排序器的值,该函数也使用 href 标记和以下行调用。

sortViewModel= HttpContext.Session["key"] as ViewModelListSort;

第一页加载正常,但是当我将其更改为第二页时,Session 的变量变为空并且排序变为默认值

该代码在 firefox 的前几页上运行良好,但我在 microsoft edge、explorer 和 google chrome.

中运气不佳

我也试过 return RedirectToAction("List", false); 但没有用。我做错了什么?

显然,我将最大工作进程数设置为 10,并且工作进程无法在它们之间交换信息,包括会话,我的 Web 应用程序使用 idproc 等。在应用程序中将参数设置为 1池的设置解决了这个问题。

在您的 IIS 应用程序池中设置多个工作进程的问题。

多进程是运行相互隔离的进程,默认情况下会导致会话状态共享问题。我们可以配置为将会话状态存储在进程外,以便共享,但那是另一回事了。

关于多少worker进程,这是一个权衡,应该根据每个应用程序进行调整。

一般来说,运行宁作为多个工作进程的主要好处是用于故障隔离,因此如果一个进程出现故障,应用程序仍然能够 运行。它也是阻塞代码的快速解决方案,因此您仍然可以在应用程序中实现更高级别的并发,但代价是由于 processes/threads 之间的更多上下文切换导致性能下降。