为实现IIS的WebGarden和WebFarm工作模式,需要配置启用StateServer。 这时我们需要配置一台独立共享的StateServer来保存Sessoin等信息的服务器。 对于WebGarden: ? 对于WebFarm: ? 下面我们一步步配置吧! 1. StateServer:在 Windows 服务进程中保存 Session,序列化存储,无大小限制,不依赖 Web 服务器,不容易丢失,但序列化消耗 CPU 性能。 当mode的值是StateServer是,这个属性是必需的。(42424是默认端口)。 Q&A Q:为何我按照上述内容配置WebGarden和StateServer,但偶然间会报如下错误呢? ?
StateServer会话模式概述 这也被称为Out-Proc会话模式。StateServer使用独立于IIS的独立Windows服务,也可以在单独的服务器上运行。 StateServer会话模式的配置 在StateServer模式下,会话数据存储在独立于IIS的独立服务器中,并由aspnet_state.exe处理。此过程作为Windows服务运行。 现在查看StateServer设置的web.config配置。对于StateServer设置,我们需要指定stateConnectionString。这将识别运行状态服务器的系统。 StateServer会话模式如何工作 我们使用StateServer会话模式来避免重新启动Web服务器时不必要的会话数据丢失。 StateServer可能是当前的系统或不同的系统。但它将完全独立于IIS。StateServer的目标将取决于web.configstateConnectionString设置。
2、StateServer模式(状态服务器模式)。 会话状态存储在一个名为ASP.Net状态服务的单独进程中。 二、使用StateServer存储session 如果网站做了负载均衡,对于session存储就只能选择2、3、4了,下面先来介绍一下StateServer模式,首先得开启状态服务 然后再对 的端口 接下来将其它服务器中web.config的配置文件进行修改(sessionState指向开启了允许远程访问的StateServer) <sessionState mode=”StateServer ” stateConnectionString=”tcpip=10.16.5.30:22222″ timeout=”20″ /> 用StateServer这种共享式的session存储方式不仅有安全隐患 ,而且像上面那台共享的StateServer只要重启服务器,所有的session都会丢失,所以这种session存储方式不是很完美,用StateServer存储sesssion比较适合单机IIS开启多进程的
2.StateServer 模式,此模式将会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。 2.StatServer模式 StateServer模式将Session存储在ASP.NET状态服务的进程中 ,使用此模式,可以保证在重启iis站点之后,Sessino不会丢失。 <sessionState mode="<em>StateServer</em>" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout 总结: 1.InProc模式:方便,读取速度快,不过由于是存在本机内存中,所以网站访问量过大,势必会给内存很大压力 2.StateServer模式:使用StateServer模式数据也是存于内存中,所以在使用 ,在没有多余服务器来使用StateServer模式的情况下,此模式为不错的选择,注意此模式也可用于远程SqlServer服务器。
1、在WEB.CONFIG文件中修改SESSION状态保存模式,如:<sessionState mode='<em>StateServer</em>' stateConnectionString='tcpip=127.0.0.1 最后使用存储在<em>StateServer</em>中的办法解决了问题。 SessionState 的Timeout),其主要原因有三种。 现在请将mode设定为<em>StateServer</em>。<em>StateServer</em>是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。 当我们设定mode为<em>StateServer</em>之后,请手工将该服务启动。 在使用<em>StateServer</em>或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如int、string等)外,都必须序列化。
控制器--配置编辑器--Controller--Task: Create 3 tasks as follows: Name Type Trust Level Entry Motion Task ROS_StateServer ROS_StateServer NO NO NO HOME:/ROS/ROS_motionServer.mod ROS_MotionServer NO NO NO HOME:/ROS/ROS_motion.mod release data-lock ENDPROC ENDMODULE ROS_stateServer MODULE ROS_stateServer ! ) LOCAL VAR socketdev server_socket; LOCAL VAR socketdev client_socket; PROC main() TPWrite "StateServer ErrWrite \W, "ROS StateServer disconnect", "Connection lost. Waiting for new connection.
当然默认的InProc模式也是性能最高的一种模式,如果您不能忍受这种“不稳定”,可以在web.config中把mode设置为StateServer模式 <sessionState mode="<em>StateServer</em> 另外,我们也必须意识到:虽然<em>StateServer</em>模式下session会稳定很多,但是性能相对InProc而言是有损耗的(大概在15%~25%左右),因为系统内部要将session值序列化以后,保存到aspnet_state 也谈不出很深的道道来,呵呵) 综合一下: InProc性能最高,但是有可能会使session无故丢失,而且这种模式无法适用于web服务器集群或负载均衡场景(因为多台服务器之间无法实现Session同步),<em>StateServer</em>
sessionState mode='InProc' cookieless='true' timeout='1200'/> 我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer 解决方案: 前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。 现在请将mode设定为StateServer。StateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。 当我们设定mode为StateServer之后,请手工将该服务启动。
sessionState节点的语法是这样的: <sessionState mode=”Off|InProc|StateServer|SQLServer” cookieless=”true|false” StateServer 设置为将Session存储在独立的状态服务中。 SQLServer 设置将Session存储在SQL Server中。 当mode的值是StateServer是,这个属性是必需的。 sqlConnectionString 设置与SQL Server连接时的连接字符串。 stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。 这时,不光需要将mode的值改为StateServer,还需要在stateConnectionString中配置相应的参数。
StateServer:当存储基本类型(如string,integer等)数据时,在同一个测试环境中它比InProc慢15%。 它也有与StateServer一样的序列化性能问题。 SQLServer:与StateServer相似。 StateServer – 在web farm中,请确认在所有的web服务器上有相同的<machineKey>。KB313091描述了如何设置它。 – 请确保你的对象是可序列化的。 Q: 在SQLServer或StateServer模式下,序列化和反序列化如何工作? Q: 我该如何让我的state server更安全?
--配置这段参数,保证会话状态不会丢失--> <sessionState mode="<em>StateServer</em>" stateConnectionString="tcpip=127.0.0.1:42424
设置程序配置文件: 将web.config打开,会看到有一行是,如果没有,请在的下一行添加,再将其中的InProc改为StateServer,保存即可。
在web.config里面如下配置 <sessionState mode="<em>StateServer</em>" stateConnectionString="tcpip
如何让IIS下多个虚拟目录共享Session 每个虚拟目录相当于是一个应用,其中的Session是不共享的,不过你的Session存储方式设置成了 inpro,stateserver还是SQLSERVE
If session mode is set to StateServer /// or SQLServer, the event is not raised. ///
具体方法是,修改网站的web.config,在system.web节中加入: <sessionState mode="<em>StateServer</em>" stateConnectionString="tcpip
如:可以配置为“<sessionState mode="<em>StateServer</em>" stateConnectionString="tcpip=myserver:42424" timeout="20" />
Session状态变量有三种模式InProc、StateServer和SQLServer,其中默认为InProc表示Session状态保存在Asp.net进程中,如果虚拟目录的程序集发生变化后在新AppDomain 题外话:如果session模式设置为StateServer表示使用状态服务器保存Session状态,就是使用另外一个本地或远程进程来保存Session状态,本地开启状态服务器步骤(系统为Windows server类型):1.开始->所有程序->管理工具->服务->开启 Asp.net状态服务,然后配置一下网站的web.config为<sessionState mode="<em>StateServer</em>" stateConnectionString
借助 ASP.NET 提供程序模型,开发人员可以从三种会话提供程序中进行选择:InProc、StateServer 和 SQLServer。
sessionState: 会话配置 Inproc 进程内存储,StateServer 第三方状态服务器存储,SqlServer 数据库存储。