Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Extensions / Profile / ProfileService.cs / 1305376 / ProfileService.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.Profile {
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Diagnostics;
using System.Web.ApplicationServices;
using System.Web.Script.Serialization;
using System.Web.Script.Services;
using System.Web.Services;
[ScriptService]
internal sealed class ProfileService {
private static JavaScriptSerializer _javaScriptSerializer;
private static JavaScriptSerializer JavaScriptSerializer {
get {
if (_javaScriptSerializer == null) {
HttpContext context = HttpContext.Current;
WebServiceData webServiceData = WebServiceData.GetWebServiceData(context, context.Request.FilePath);
_javaScriptSerializer = webServiceData.Serializer;
Debug.Assert(_javaScriptSerializer != null);
}
return _javaScriptSerializer;
}
}
private static Dictionary GetProfile(HttpContext context, IEnumerable properties) {
ProfileBase profile = context.Profile;
if(profile == null) {
return null;
}
Dictionary allowedGet = ApplicationServiceHelper.ProfileAllowedGet;
if (allowedGet == null || allowedGet.Count == 0) {
// there are no readable properties
return new Dictionary(0);
}
Dictionary dictionary = null;
if(properties == null) {
// initialize capacity to the exact number we will fill: the number of readAccessProperties
dictionary = new Dictionary(allowedGet.Count, StringComparer.OrdinalIgnoreCase);
// Returns all profile properties defined in configuration when given properties array is null
string propertyName;
foreach(KeyValuePair entry in allowedGet) {
// note: dont enumerate over _allowedGet.Keys since it unecessarily creates a keys collection object
propertyName = entry.Key;
dictionary.Add(propertyName, profile[propertyName]);
}
}
else {
// initialize capacity to the largest possible number of properties we may return.
dictionary = new Dictionary(allowedGet.Count, StringComparer.OrdinalIgnoreCase);
// Returns the specified profile properties (if empty array, no properties returned)
foreach(string propertyName in properties) {
if(allowedGet.ContainsKey(propertyName)) {
dictionary.Add(propertyName, profile[propertyName]);
}
}
}
return dictionary;
}
private static Collection SetProfile(HttpContext context, IDictionary values) {
// return collection of successfully saved settings.
Collection failedSettings = new Collection();
if (values == null || values.Count == 0) {
// no values were given, so we're done, and there are no failures.
return failedSettings;
}
ProfileBase profile = context.Profile;
Dictionary allowedSet = ApplicationServiceHelper.ProfileAllowedSet;
// Note that profile may be null, and allowedSet may be null.
// Even though no properties will be saved in these cases, we still iterate over the given values to be set,
// because we must build up the failed collection anyway.
bool profileDirty = false;
foreach(KeyValuePair entry in values) {
string propertyName = entry.Key;
if (profile != null && allowedSet != null && allowedSet.ContainsKey(propertyName)) {
SettingsProperty settingProperty = ProfileBase.Properties[propertyName];
if (settingProperty != null && !settingProperty.IsReadOnly &&
(!profile.IsAnonymous || (bool)settingProperty.Attributes["AllowAnonymous"])) {
Type propertyType = settingProperty.PropertyType;
object convertedValue;
if (ObjectConverter.TryConvertObjectToType(entry.Value, propertyType, JavaScriptSerializer, out convertedValue)) {
profile[propertyName] = convertedValue;
profileDirty = true;
// setting successfully saved.
// short circuit the foreach so only failed cases fall through.
continue;
}
}
}
// Failed cases fall through to here. Possible failure reasons:
// 1. type couldn't be converted for some reason (TryConvert returns false)
// 2. the property doesnt exist (settingProperty == null)
// 3. the property is read only (settingProperty.IsReadOnly)
// 4. the current user is anonymous and the setting doesn't allow anonymous access
// 5. profile for this user is null (profile == null)
// 6. no properties are allowed for setting (allowedSet is null)
// 7. *this* property is not allowed for setting (allowedSet.Contains returns false)
failedSettings.Add(propertyName);
}
if (profileDirty) {
profile.Save();
}
return failedSettings;
}
[WebMethod]
public Dictionary GetAllPropertiesForCurrentUser(bool authenticatedUserOnly) {
ApplicationServiceHelper.EnsureProfileServiceEnabled();
HttpContext context = HttpContext.Current;
if (authenticatedUserOnly) {
ApplicationServiceHelper.EnsureAuthenticated(context);
}
return ProfileService.GetProfile(context, null);
}
[WebMethod]
public Dictionary GetPropertiesForCurrentUser(IEnumerable properties, bool authenticatedUserOnly) {
ApplicationServiceHelper.EnsureProfileServiceEnabled();
HttpContext context = HttpContext.Current;
if (authenticatedUserOnly) {
ApplicationServiceHelper.EnsureAuthenticated(context);
}
return ProfileService.GetProfile(context, properties);
}
[WebMethod]
public Collection GetPropertiesMetadata() {
ApplicationServiceHelper.EnsureProfileServiceEnabled();
return ApplicationServiceHelper.GetProfilePropertiesMetadata();
}
[WebMethod]
public Collection SetPropertiesForCurrentUser(IDictionary values, bool authenticatedUserOnly) {
ApplicationServiceHelper.EnsureProfileServiceEnabled();
HttpContext context = HttpContext.Current;
if (authenticatedUserOnly) {
ApplicationServiceHelper.EnsureAuthenticated(context);
}
return ProfileService.SetProfile(context, values);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.Profile {
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Diagnostics;
using System.Web.ApplicationServices;
using System.Web.Script.Serialization;
using System.Web.Script.Services;
using System.Web.Services;
[ScriptService]
internal sealed class ProfileService {
private static JavaScriptSerializer _javaScriptSerializer;
private static JavaScriptSerializer JavaScriptSerializer {
get {
if (_javaScriptSerializer == null) {
HttpContext context = HttpContext.Current;
WebServiceData webServiceData = WebServiceData.GetWebServiceData(context, context.Request.FilePath);
_javaScriptSerializer = webServiceData.Serializer;
Debug.Assert(_javaScriptSerializer != null);
}
return _javaScriptSerializer;
}
}
private static Dictionary GetProfile(HttpContext context, IEnumerable properties) {
ProfileBase profile = context.Profile;
if(profile == null) {
return null;
}
Dictionary allowedGet = ApplicationServiceHelper.ProfileAllowedGet;
if (allowedGet == null || allowedGet.Count == 0) {
// there are no readable properties
return new Dictionary(0);
}
Dictionary dictionary = null;
if(properties == null) {
// initialize capacity to the exact number we will fill: the number of readAccessProperties
dictionary = new Dictionary(allowedGet.Count, StringComparer.OrdinalIgnoreCase);
// Returns all profile properties defined in configuration when given properties array is null
string propertyName;
foreach(KeyValuePair entry in allowedGet) {
// note: dont enumerate over _allowedGet.Keys since it unecessarily creates a keys collection object
propertyName = entry.Key;
dictionary.Add(propertyName, profile[propertyName]);
}
}
else {
// initialize capacity to the largest possible number of properties we may return.
dictionary = new Dictionary(allowedGet.Count, StringComparer.OrdinalIgnoreCase);
// Returns the specified profile properties (if empty array, no properties returned)
foreach(string propertyName in properties) {
if(allowedGet.ContainsKey(propertyName)) {
dictionary.Add(propertyName, profile[propertyName]);
}
}
}
return dictionary;
}
private static Collection SetProfile(HttpContext context, IDictionary values) {
// return collection of successfully saved settings.
Collection failedSettings = new Collection();
if (values == null || values.Count == 0) {
// no values were given, so we're done, and there are no failures.
return failedSettings;
}
ProfileBase profile = context.Profile;
Dictionary allowedSet = ApplicationServiceHelper.ProfileAllowedSet;
// Note that profile may be null, and allowedSet may be null.
// Even though no properties will be saved in these cases, we still iterate over the given values to be set,
// because we must build up the failed collection anyway.
bool profileDirty = false;
foreach(KeyValuePair entry in values) {
string propertyName = entry.Key;
if (profile != null && allowedSet != null && allowedSet.ContainsKey(propertyName)) {
SettingsProperty settingProperty = ProfileBase.Properties[propertyName];
if (settingProperty != null && !settingProperty.IsReadOnly &&
(!profile.IsAnonymous || (bool)settingProperty.Attributes["AllowAnonymous"])) {
Type propertyType = settingProperty.PropertyType;
object convertedValue;
if (ObjectConverter.TryConvertObjectToType(entry.Value, propertyType, JavaScriptSerializer, out convertedValue)) {
profile[propertyName] = convertedValue;
profileDirty = true;
// setting successfully saved.
// short circuit the foreach so only failed cases fall through.
continue;
}
}
}
// Failed cases fall through to here. Possible failure reasons:
// 1. type couldn't be converted for some reason (TryConvert returns false)
// 2. the property doesnt exist (settingProperty == null)
// 3. the property is read only (settingProperty.IsReadOnly)
// 4. the current user is anonymous and the setting doesn't allow anonymous access
// 5. profile for this user is null (profile == null)
// 6. no properties are allowed for setting (allowedSet is null)
// 7. *this* property is not allowed for setting (allowedSet.Contains returns false)
failedSettings.Add(propertyName);
}
if (profileDirty) {
profile.Save();
}
return failedSettings;
}
[WebMethod]
public Dictionary GetAllPropertiesForCurrentUser(bool authenticatedUserOnly) {
ApplicationServiceHelper.EnsureProfileServiceEnabled();
HttpContext context = HttpContext.Current;
if (authenticatedUserOnly) {
ApplicationServiceHelper.EnsureAuthenticated(context);
}
return ProfileService.GetProfile(context, null);
}
[WebMethod]
public Dictionary GetPropertiesForCurrentUser(IEnumerable properties, bool authenticatedUserOnly) {
ApplicationServiceHelper.EnsureProfileServiceEnabled();
HttpContext context = HttpContext.Current;
if (authenticatedUserOnly) {
ApplicationServiceHelper.EnsureAuthenticated(context);
}
return ProfileService.GetProfile(context, properties);
}
[WebMethod]
public Collection GetPropertiesMetadata() {
ApplicationServiceHelper.EnsureProfileServiceEnabled();
return ApplicationServiceHelper.GetProfilePropertiesMetadata();
}
[WebMethod]
public Collection SetPropertiesForCurrentUser(IDictionary values, bool authenticatedUserOnly) {
ApplicationServiceHelper.EnsureProfileServiceEnabled();
HttpContext context = HttpContext.Current;
if (authenticatedUserOnly) {
ApplicationServiceHelper.EnsureAuthenticated(context);
}
return ProfileService.SetProfile(context, values);
}
}
}
// 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
- Image.cs
- XmlSchemaAttributeGroupRef.cs
- GridToolTip.cs
- BoundPropertyEntry.cs
- DataPagerFieldCommandEventArgs.cs
- SerializableAttribute.cs
- RSAPKCS1SignatureDeformatter.cs
- TextChange.cs
- ProfileGroupSettingsCollection.cs
- HelpEvent.cs
- EventLogEntry.cs
- OutgoingWebResponseContext.cs
- DependencyPropertyChangedEventArgs.cs
- ReturnType.cs
- UnaryQueryOperator.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- MouseActionConverter.cs
- DbConnectionPoolGroupProviderInfo.cs
- StateDesignerConnector.cs
- ModuleElement.cs
- Bidi.cs
- Decoder.cs
- RuntimeEnvironment.cs
- SmiRecordBuffer.cs
- DispatcherHookEventArgs.cs
- ApplicationDirectory.cs
- TableRowCollection.cs
- AddInProcess.cs
- _UriTypeConverter.cs
- MessageSecurityOverHttp.cs
- DataKeyCollection.cs
- AdRotator.cs
- DisplayNameAttribute.cs
- XMLDiffLoader.cs
- XmlSchemaDatatype.cs
- DataGridViewRowConverter.cs
- AncestorChangedEventArgs.cs
- AstTree.cs
- EncoderBestFitFallback.cs
- SpellerInterop.cs
- HGlobalSafeHandle.cs
- OperationDescriptionCollection.cs
- MultiPageTextView.cs
- dataprotectionpermissionattribute.cs
- ObjectListDataBindEventArgs.cs
- COM2AboutBoxPropertyDescriptor.cs
- COM2IPerPropertyBrowsingHandler.cs
- RelationshipConstraintValidator.cs
- BitmapEffectInputConnector.cs
- DoubleLinkList.cs
- IndexedWhereQueryOperator.cs
- Serializer.cs
- IgnoreFlushAndCloseStream.cs
- DrawingGroup.cs
- BitmapSource.cs
- TriggerActionCollection.cs
- InboundActivityHelper.cs
- TrustVersion.cs
- AssemblyBuilder.cs
- WebPartAuthorizationEventArgs.cs
- SQLDecimal.cs
- FormsAuthenticationUserCollection.cs
- TokenBasedSet.cs
- SmtpNetworkElement.cs
- DrawListViewItemEventArgs.cs
- DataGridTableCollection.cs
- InvalidContentTypeException.cs
- NullReferenceException.cs
- HttpRuntimeSection.cs
- DynamicControlParameter.cs
- Listen.cs
- DataGridState.cs
- TraceAsyncResult.cs
- DataGridViewCellCollection.cs
- NativeMethodsOther.cs
- KeyManager.cs
- ResourceSetExpression.cs
- FormsAuthenticationModule.cs
- RegexCompiler.cs
- LogStore.cs
- AssociationSetEnd.cs
- CompressedStack.cs
- TrackingStringDictionary.cs
- DataViewManager.cs
- TypedReference.cs
- EntityDataSourceValidationException.cs
- DataServiceQueryOfT.cs
- FontStretch.cs
- PhysicalAddress.cs
- PolyQuadraticBezierSegment.cs
- TimeSpanValidatorAttribute.cs
- ScriptReference.cs
- XmlSecureResolver.cs
- ToolStripItemGlyph.cs
- BoundField.cs
- ValueSerializer.cs
- ConfigurationPropertyAttribute.cs
- CanExecuteRoutedEventArgs.cs
- RelatedCurrencyManager.cs
- XmlBinaryReader.cs