Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / UI / SessionPageStatePersister.cs / 1305376 / SessionPageStatePersister.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI {
using System.Collections;
using System.Collections.Specialized;
using System.IO;
using System.Text;
using System.Web.SessionState;
using System.Web.Configuration;
public class SessionPageStatePersister : PageStatePersister {
private const string _viewStateSessionKey = "__SESSIONVIEWSTATE";
private const string _viewStateQueueKey = "__VIEWSTATEQUEUE";
public SessionPageStatePersister(Page page) : base (page) {
HttpSessionState session = null;
try {
session = page.Session;
}
catch {
// ignore, throw if session is null.
}
if (session == null) {
throw new ArgumentException(SR.GetString(SR.SessionPageStatePersister_SessionMustBeEnabled));
}
}
public override void Load() {
NameValueCollection requestValueCollection = Page.RequestValueCollection;
if (requestValueCollection == null) {
return;
}
try {
string combinedSerializedStateString = Page.RequestViewStateString;
string persistedStateID = null;
bool controlStateInSession = false;
// SessionState will persist a Pair of ,
// where if requiresControlStateInSession is true, second will just be the sessionID, as
// we will store both control state and view state in session. Otherwise, we store just the
// view state in session and the pair will be
if (!String.IsNullOrEmpty(combinedSerializedStateString)) {
Pair combinedState = (Pair)Util.DeserializeWithAssert(StateFormatter, combinedSerializedStateString);
// Check if we are storing control state in session as well
if ((bool)combinedState.First) {
// So the second is the persistedID
persistedStateID = (string)combinedState.Second;
controlStateInSession = true;
}
else {
// Second is
Pair pair = (Pair)combinedState.Second;
persistedStateID = (string)pair.First;
ControlState = pair.Second;
}
}
if (persistedStateID != null) {
object sessionData = Page.Session[_viewStateSessionKey + persistedStateID];
if (controlStateInSession) {
Pair combinedState = sessionData as Pair;
if (combinedState != null) {
ViewState = combinedState.First;
ControlState = combinedState.Second;
}
}
else {
ViewState = sessionData;
}
}
}
catch (Exception e) {
// Setup the formatter for this exception, to make sure this message shows up
// in an error page as opposed to the inner-most exception's message.
HttpException newException = new HttpException(SR.GetString(SR.Invalid_ControlState), e);
newException.SetFormatter(new UseLastUnhandledErrorFormatter(newException));
throw newException;
}
}
///
/// To be supplied.
///
public override void Save() {
bool requiresControlStateInSession = false;
object clientData = null;
Triplet vsTrip = ViewState as Triplet;
// no session view state to store.
if ((ControlState != null) ||
((vsTrip == null || vsTrip.Second != null || vsTrip.Third != null) && ViewState != null)) {
HttpSessionState session = Page.Session;
string sessionViewStateID = Convert.ToString(DateTime.Now.Ticks, 16);
object state = null;
requiresControlStateInSession = Page.Request.Browser.RequiresControlStateInSession;
if (requiresControlStateInSession) {
// ClientState will just be sessionID
state = new Pair(ViewState, ControlState);
clientData = sessionViewStateID;
}
else {
// ClientState will be a
state = ViewState;
clientData = new Pair(sessionViewStateID, ControlState);
}
string sessionKey = _viewStateSessionKey + sessionViewStateID;
session[sessionKey] = state;
Queue queue = session[_viewStateQueueKey] as Queue;
if (queue == null) {
queue = new Queue();
session[_viewStateQueueKey] = queue;
}
queue.Enqueue(sessionKey);
SessionPageStateSection cfg = RuntimeConfig.GetConfig(Page.Request.Context).SessionPageState;
int queueCount = queue.Count;
if (cfg != null && queueCount > cfg.HistorySize ||
cfg == null && queueCount > SessionPageStateSection.DefaultHistorySize) {
string oldSessionKey = (string)queue.Dequeue();
session.Remove(oldSessionKey);
}
}
if (clientData != null) {
Page.ClientState = Util.SerializeWithAssert(StateFormatter, new Pair(requiresControlStateInSession, clientData));
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DrawingContext.cs
- Padding.cs
- nulltextnavigator.cs
- SvcMapFileSerializer.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- PropertyGeneratedEventArgs.cs
- ViewValidator.cs
- FileRecordSequenceCompletedAsyncResult.cs
- UriTemplateTrieLocation.cs
- Application.cs
- linebase.cs
- RegexCapture.cs
- GenericUriParser.cs
- DataGridViewRowsAddedEventArgs.cs
- Point3DKeyFrameCollection.cs
- SerializationObjectManager.cs
- VirtualDirectoryMapping.cs
- RuntimeConfigLKG.cs
- SqlBooleanizer.cs
- ValueOfAction.cs
- StaticResourceExtension.cs
- ExpressionPrefixAttribute.cs
- DataGridViewCellValidatingEventArgs.cs
- ChildrenQuery.cs
- StringResourceManager.cs
- ListBoxItemAutomationPeer.cs
- InternalConfigEventArgs.cs
- CapabilitiesRule.cs
- CompilerLocalReference.cs
- HttpClientCertificate.cs
- MethodBuilder.cs
- ModifierKeysConverter.cs
- TextElementCollection.cs
- PrintController.cs
- WebPartMenu.cs
- MemberDomainMap.cs
- TextFindEngine.cs
- HttpCapabilitiesEvaluator.cs
- UIElement.cs
- RenameRuleObjectDialog.Designer.cs
- SourceSwitch.cs
- SharedDp.cs
- PointLight.cs
- HandledMouseEvent.cs
- FtpWebResponse.cs
- CompiledRegexRunnerFactory.cs
- AssertFilter.cs
- SuppressMergeCheckAttribute.cs
- Screen.cs
- NativeMethods.cs
- SemanticValue.cs
- WindowsEditBoxRange.cs
- ApplicationId.cs
- Configuration.cs
- SessionViewState.cs
- BindingListCollectionView.cs
- _ConnectStream.cs
- MobileControlBuilder.cs
- BaseTemplateCodeDomTreeGenerator.cs
- _SslState.cs
- ContextMarshalException.cs
- CalendarDesigner.cs
- StructuredType.cs
- DynamicFilterExpression.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- IgnoreDeviceFilterElementCollection.cs
- NumberSubstitution.cs
- ModelService.cs
- InstanceCreationEditor.cs
- MostlySingletonList.cs
- SvcMapFileLoader.cs
- TTSEngineProxy.cs
- PanelContainerDesigner.cs
- SettingsProviderCollection.cs
- BoundPropertyEntry.cs
- ImageAnimator.cs
- TextDecorationLocationValidation.cs
- WebPartConnectionsCloseVerb.cs
- IssuedTokenParametersElement.cs
- SQLDoubleStorage.cs
- ClientBuildManagerCallback.cs
- XmlStringTable.cs
- _SSPISessionCache.cs
- RootBrowserWindow.cs
- Comparer.cs
- FrameworkContentElement.cs
- XmlILConstructAnalyzer.cs
- ListViewItemMouseHoverEvent.cs
- WebUtil.cs
- QuaternionKeyFrameCollection.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- SHA512Managed.cs
- ScaleTransform.cs
- ToolboxComponentsCreatingEventArgs.cs
- _PooledStream.cs
- IisTraceWebEventProvider.cs
- SystemInformation.cs
- RectangleConverter.cs
- TabletDevice.cs
- RowType.cs