Code:
/ DotNET / DotNET / 8.0 / untmp / Orcas / RTM / ndp / fx / src / xsp / System / Web / Extensions / Profile / ProfileService.cs / 1 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OneToOneMappingSerializer.cs
- MinimizableAttributeTypeConverter.cs
- FontResourceCache.cs
- RuntimeHelpers.cs
- UnicodeEncoding.cs
- WebBaseEventKeyComparer.cs
- ProcessInputEventArgs.cs
- RegistryPermission.cs
- RelatedEnd.cs
- ICspAsymmetricAlgorithm.cs
- ConfigXmlDocument.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- NativeMethods.cs
- FixedElement.cs
- MarshalByRefObject.cs
- Operand.cs
- odbcmetadatafactory.cs
- TraceSection.cs
- CodeAttachEventStatement.cs
- AsyncOperation.cs
- BindableAttribute.cs
- TreeIterator.cs
- HtmlTable.cs
- LostFocusEventManager.cs
- AxisAngleRotation3D.cs
- DataIdProcessor.cs
- StorageRoot.cs
- AnnouncementInnerClientCD1.cs
- DataBoundLiteralControl.cs
- MatrixTransform3D.cs
- EntityDataSourceView.cs
- DataGridViewColumnConverter.cs
- ListViewDesigner.cs
- InvalidPrinterException.cs
- CutCopyPasteHelper.cs
- XmlHelper.cs
- SourceChangedEventArgs.cs
- NominalTypeEliminator.cs
- IdentityReference.cs
- NullableDoubleSumAggregationOperator.cs
- WorkflowDefinitionDispenser.cs
- MSAAWinEventWrap.cs
- RowSpanVector.cs
- DetailsViewCommandEventArgs.cs
- NavigationPropertyEmitter.cs
- DesignerAttribute.cs
- ExpressionConverter.cs
- GC.cs
- FixedDocumentPaginator.cs
- RelatedPropertyManager.cs
- SessionEndingEventArgs.cs
- MergablePropertyAttribute.cs
- TextOnlyOutput.cs
- DataRecordInfo.cs
- Int32AnimationUsingKeyFrames.cs
- DynamicEntity.cs
- Automation.cs
- MaskInputRejectedEventArgs.cs
- EncryptedKeyHashIdentifierClause.cs
- OleTxTransactionInfo.cs
- TextRangeEditLists.cs
- SetIterators.cs
- SqlDataSourceQueryEditor.cs
- SessionStateContainer.cs
- SafeFileHandle.cs
- DynamicDataManager.cs
- FixedPageProcessor.cs
- HandlerFactoryWrapper.cs
- SiteMapNodeItem.cs
- Camera.cs
- PolicyValidationException.cs
- BaseProcessor.cs
- ArgIterator.cs
- WebEventTraceProvider.cs
- TransformedBitmap.cs
- BinaryMessageEncodingElement.cs
- DrawingGroup.cs
- SizeValueSerializer.cs
- GenerateHelper.cs
- ProxyElement.cs
- NotifyParentPropertyAttribute.cs
- IndentedWriter.cs
- Rfc2898DeriveBytes.cs
- QuerySetOp.cs
- BlurEffect.cs
- EventArgs.cs
- X509Certificate.cs
- ListViewAutomationPeer.cs
- ListMarkerSourceInfo.cs
- ResourcesGenerator.cs
- ProfileSection.cs
- HashAlgorithm.cs
- CodeTypeMemberCollection.cs
- PointLight.cs
- TableRowCollection.cs
- ColumnMapCopier.cs
- DBBindings.cs
- DetailsViewPageEventArgs.cs
- DataServiceHost.cs
- DescendentsWalkerBase.cs