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
- NameSpaceExtractor.cs
- ADMembershipProvider.cs
- PropertyChangedEventArgs.cs
- NGCSerializer.cs
- BaseUriHelper.cs
- TextSearch.cs
- ValueCollectionParameterReader.cs
- RelatedView.cs
- SizeFConverter.cs
- SmtpNtlmAuthenticationModule.cs
- InvalidOperationException.cs
- PageParserFilter.cs
- _SingleItemRequestCache.cs
- DataServiceOperationContext.cs
- RecordManager.cs
- IODescriptionAttribute.cs
- UriTemplateEquivalenceComparer.cs
- DigitShape.cs
- OdbcConnectionPoolProviderInfo.cs
- FullTextLine.cs
- XsltQilFactory.cs
- MediaTimeline.cs
- AppDomainUnloadedException.cs
- RootProfilePropertySettingsCollection.cs
- DataSourceSelectArguments.cs
- ExtenderProviderService.cs
- PropertyGridEditorPart.cs
- SessionEndingCancelEventArgs.cs
- CodePageUtils.cs
- EntityModelBuildProvider.cs
- DPAPIProtectedConfigurationProvider.cs
- GenericAuthenticationEventArgs.cs
- InstancePersistence.cs
- MsmqInputChannel.cs
- XmlCustomFormatter.cs
- EmptyCollection.cs
- CorePropertiesFilter.cs
- ProtectedProviderSettings.cs
- Icon.cs
- TreeWalker.cs
- DeviceContext.cs
- OracleConnectionString.cs
- ProviderConnectionPointCollection.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- IISUnsafeMethods.cs
- IncrementalCompileAnalyzer.cs
- XhtmlBasicValidatorAdapter.cs
- StyleCollection.cs
- EdmToObjectNamespaceMap.cs
- storepermission.cs
- XmlSerializerSection.cs
- WsatServiceAddress.cs
- UIAgentMonitorHandle.cs
- HttpModulesSection.cs
- StorageComplexPropertyMapping.cs
- DurableTimerExtension.cs
- EntitySqlQueryState.cs
- TextEditorSpelling.cs
- RecognizerInfo.cs
- HandlerBase.cs
- XmlQueryContext.cs
- XmlNamespaceMappingCollection.cs
- HtmlTable.cs
- RequestResizeEvent.cs
- GenericEnumConverter.cs
- GridSplitter.cs
- MeasureItemEvent.cs
- CodeRemoveEventStatement.cs
- URL.cs
- DiscoveryMessageSequenceGenerator.cs
- TextEffect.cs
- BamlRecordReader.cs
- ButtonChrome.cs
- PeerTransportSecuritySettings.cs
- BaseProcessProtocolHandler.cs
- HttpContext.cs
- ClientData.cs
- RelationshipEndCollection.cs
- WebPartConnectionsConnectVerb.cs
- ColumnMap.cs
- TextServicesProperty.cs
- XmlDataFileEditor.cs
- SqlSelectClauseBuilder.cs
- HostedAspNetEnvironment.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- TextSimpleMarkerProperties.cs
- SoapIncludeAttribute.cs
- DataTableClearEvent.cs
- XmlSchemaExporter.cs
- PointConverter.cs
- DataGridViewCellCancelEventArgs.cs
- FontStretch.cs
- DeploymentSectionCache.cs
- WsiProfilesElement.cs
- FormsAuthenticationUser.cs
- arc.cs
- DataGridViewButtonCell.cs
- ReferenceAssemblyAttribute.cs
- SelectionItemProviderWrapper.cs
- RecognizerInfo.cs