gpt4 book ai didi

c# - Inproc 和 Outproc session 状态模式

转载 作者:行者123 更新时间:2023-11-30 19:40:09 35 4
gpt4 key购买 nike

我对 session 状态模式有基本的了解,我已经经历了this article在 MSDN 上,但无法理解何时使用 InProc、StateServer 和 SqlServer session 模式?更具体地说,混淆了何时使用 State Server 和何时使用 sqlserver?

最佳答案

这 3 种不同的模式有助于以不同的方式分散您的状态,使您的应用程序在整个服务器场中更具可扩展性,并使其在自身操作中更加健壮。

进程中
InProc 是最基本的 session 管理方案,其中 session 存储附加到实际运行它的进程。这意味着它具有最快的响应时间,因为服务器不必转到备用源来获取所需的数据。虽然它在技术上是最快的,但它也是最弱的,因为它只能在运行网站的服务器上使用。它还容易出现内存转储。如果您的网站因任何原因崩溃, session 将与进程一起被转储。对于小型、非常稳定的站点,InProc 是完全可以接受的,甚至可能是理想的。 InProc 还具有能够在 session 中保存任何内存对象的好处。如果您试图握住巨大的物体,这也会有问题。

状态服务器
StateServer 是指可以驻留在任何特定机器上的 ASP.Net 状态服务器服务。它通常在端口 42424 上运行,可以为单台机器或多台机器提供服务。它旨在比 SQL 服务器状态管理方法更快,但我认为速度上的差异可以忽略不计。也许在非常大的企业环境中,这种差异会变得很明显,但对于我所见过的网络场,情况并非如此。 StateServer 要求 session 中的任何对象都是Serializable 以便正确存储和传输。这意味着不仅任何对象都可以放置在 session 中,因此您在构建类时要提前计划。状态服务器可以位于您网站所在的机器上,也可以位于可通过 42424 端口访问的机器上。这意味着 session 数据与 IIS 进程分离,因此“免疫”崩溃和挂起。这允许您拥有一个使用公共(public)状态服务器的服务器场,如果客户端不需要限制到特定服务器,负载平衡就会变得简单。虽然状态服务器服务速度相当快,但它在一个端口上运行,许多网络管理员认为该端口只是入侵的另一个“攻击媒介”。这导致了 SQL 状态服务器。

SQLServerSqlServer 模式的操作与 StateServer 非常相似。对象必须序列化,sql server 可以是本地的,也可以是远程的,这样可以降低服务器场中单个服务器崩溃的可能性。网络管理员倾向于使用 sql server 进行状态管理,因为它们减少了入侵向量。由于您的网站可能无论如何都需要一个 sql server 来执行数据访问,所以这只是 piggy backing。 SQL Server 还允许您直观地检查状态表中的内容。

我通常偏爱 StateServer。它非常容易启动和运行,您可以拥有一个通用的,它可以为许多不相关的环境(如:dev、qa 等)保存状态。它不需要实际维护并且非常容易设置。它也不需要像 sql server 那样运行的许可证。但是,随着您对分散性和安全性的需求增加,sql server 成为一个更友好的选择。仅将 InProc 用于最基本的网站或流量有限的网站。

关于c# - Inproc 和 Outproc session 状态模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24653692/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com