Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Configuration / ServiceModelExtensionElement.cs / 1 / ServiceModelExtensionElement.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Configuration { using System.Collections.Generic; using System.ServiceModel; using System.Configuration; using System.Diagnostics; using System.Globalization; using System.Security.Permissions; using System.ServiceModel.Diagnostics; using System.Xml; using System.Security; [ConfigurationPermission(SecurityAction.InheritanceDemand, Unrestricted = true)] public abstract class ServiceModelExtensionElement : ConfigurationElement, IConfigurationContextProviderInternal { ////// Critical - stores information used in a security decision /// [SecurityCritical] EvaluationContextHelper contextHelper; ContextInformation containingEvaluationContext = null; string configurationElementName = String.Empty; string extensionCollectionName = String.Empty; bool modified = false; protected ServiceModelExtensionElement() : base() { } ////// Critical - calls SecurityCritical method UnsafeLookupCollection which elevates in order to load config /// Safe - does not leak any config objects /// [SecurityCritical, SecurityTreatAsSafe] internal bool CanAdd(string extensionCollectionName, ContextInformation evaluationContext) { bool retVal = false; ExtensionElementCollection collection = ExtensionsSection.UnsafeLookupCollection(extensionCollectionName, evaluationContext); if (null != collection && collection.Count != 0) { foreach (ExtensionElement extensionElement in collection) { if (extensionElement.Type.Equals(this.GetType().AssemblyQualifiedName, StringComparison.Ordinal)) { retVal = true; break; } } if (!retVal && DiagnosticUtility.ShouldTraceWarning) { TraceUtility.TraceEvent(TraceEventType.Warning, TraceCode.ConfiguredExtensionTypeNotFound, this.CreateCanAddRecord(extensionCollectionName), this, null); } } else if (DiagnosticUtility.ShouldTraceWarning) { TraceCode traceCode = TraceCode.ExtensionCollectionDoesNotExist; if (null != collection && collection.Count == 0) { traceCode = TraceCode.ExtensionCollectionIsEmpty; } TraceUtility.TraceEvent(TraceEventType.Warning, traceCode, this.CreateCanAddRecord(extensionCollectionName), this, null); } return retVal; } public string ConfigurationElementName { get { if (String.IsNullOrEmpty(this.configurationElementName)) { this.configurationElementName = this.GetConfigurationElementName(); } return this.configurationElementName; } } internal ContextInformation ContainingEvaluationContext { get { return this.containingEvaluationContext; } set { this.containingEvaluationContext = value; } } public virtual void CopyFrom(ServiceModelExtensionElement from) { if (this.IsReadOnly()) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.ConfigReadOnly))); } if (from == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("from"); } } DictionaryTraceRecord CreateCanAddRecord(string extensionCollectionName) { Dictionaryvalues = new Dictionary (2); values["ElementType"] = DiagnosticTrace.XmlEncode(this.GetType().AssemblyQualifiedName); values["CollectionName"] = ConfigurationStrings.ExtensionsSectionPath + "/" + extensionCollectionName; return new DictionaryTraceRecord(values); } internal void DeserializeInternal(XmlReader reader, bool serializeCollectionKey) { this.DeserializeElement(reader, serializeCollectionKey); } internal string ExtensionCollectionName { set { this.extensionCollectionName = value; } get { return this.extensionCollectionName; } } internal ContextInformation EvalContext { get { return this.EvaluationContext; } } internal object FromProperty(ConfigurationProperty property) { return this[property]; } /// /// Critical - calls SecurityCritical methods UnsafeLookupCollection and UnsafeLookupAssociatedCollection which elevate in order to load config /// Safe - does not leak any config objects /// [SecurityCritical, SecurityTreatAsSafe] string GetConfigurationElementName() { string configurationElementName = String.Empty; ExtensionElementCollection collection = null; Type extensionSectionType = this.GetType(); ContextInformation evaluationContext = ConfigurationHelpers.GetEvaluationContext(this); if (evaluationContext == null) { evaluationContext = this.ContainingEvaluationContext; } if (String.IsNullOrEmpty(this.extensionCollectionName)) { if (DiagnosticUtility.ShouldTraceWarning) { TraceUtility.TraceEvent(TraceEventType.Warning, TraceCode.ExtensionCollectionNameNotFound, this, (Exception)null); } collection = ExtensionsSection.UnsafeLookupAssociatedCollection(this.GetType(), evaluationContext, out this.extensionCollectionName); } else { collection = ExtensionsSection.UnsafeLookupCollection(this.extensionCollectionName, evaluationContext); } if (null == collection) { if (String.IsNullOrEmpty(this.extensionCollectionName)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.ConfigNoExtensionCollectionAssociatedWithType, extensionSectionType.AssemblyQualifiedName), this.ElementInformation.Source, this.ElementInformation.LineNumber)); } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.ConfigExtensionCollectionNotFound, this.extensionCollectionName), this.ElementInformation.Source, this.ElementInformation.LineNumber)); } } for (int i = 0; i < collection.Count; i++) { ExtensionElement collectionElement = collection[i]; // Optimize for assembly qualified names. if (collectionElement.Type.Equals(extensionSectionType.AssemblyQualifiedName, StringComparison.Ordinal)) { configurationElementName = collectionElement.Name; break; } // Check type directly for the case that the extension is registered with something less than // an full assembly qualified name. Type collectionElementType = Type.GetType(collectionElement.Type, false); if (null != collectionElementType && extensionSectionType.Equals(collectionElementType)) { configurationElementName = collectionElement.Name; break; } } if (String.IsNullOrEmpty(configurationElementName)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.ConfigExtensionTypeNotRegisteredInCollection, extensionSectionType.AssemblyQualifiedName, this.extensionCollectionName), this.ElementInformation.Source, this.ElementInformation.LineNumber)); } return configurationElementName; } internal void InternalInitializeDefault() { this.InitializeDefault(); } protected override bool IsModified() { return this.modified | base.IsModified(); } internal bool IsModifiedInternal() { return this.IsModified(); } internal ConfigurationPropertyCollection PropertiesInternal { get { return this.Properties; } } internal void ResetModifiedInternal() { this.ResetModified(); } protected override bool SerializeElement(XmlWriter writer, bool serializeCollectionKey) { base.SerializeElement(writer, serializeCollectionKey); return true; } internal bool SerializeInternal(XmlWriter writer, bool serializeCollectionKey) { return this.SerializeElement(writer, serializeCollectionKey); } internal void SetReadOnlyInternal() { this.SetReadOnly(); } ////// Critical - accesses critical field contextHelper /// [SecurityCritical] protected override void Reset(ConfigurationElement parentElement) { this.contextHelper.OnReset(parentElement); base.Reset(parentElement); } ContextInformation IConfigurationContextProviderInternal.GetEvaluationContext() { return this.EvaluationContext; } ////// Critical -- accesses critical field contextHelper /// RequiresReview -- the return value will be used for a security decision -- see comment in interface definition /// [SecurityCritical] ContextInformation IConfigurationContextProviderInternal.GetOriginalEvaluationContext() { return this.contextHelper.GetOriginalContext(this); } } } // 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
- AdCreatedEventArgs.cs
- Line.cs
- TypeSchema.cs
- DependencySource.cs
- Path.cs
- MetadataArtifactLoaderFile.cs
- HostProtectionException.cs
- ProxyManager.cs
- ToolStripEditorManager.cs
- Selector.cs
- AssertFilter.cs
- Vector3D.cs
- EventWaitHandle.cs
- XmlConvert.cs
- SqlSelectStatement.cs
- WebEventTraceProvider.cs
- XmlNotation.cs
- XmlILOptimizerVisitor.cs
- FormViewUpdateEventArgs.cs
- WebPartHelpVerb.cs
- Expr.cs
- DesignerTextWriter.cs
- FactoryMaker.cs
- CornerRadiusConverter.cs
- Margins.cs
- FigureParaClient.cs
- DeriveBytes.cs
- EntityDataSourceUtil.cs
- DiscoveryInnerClientAdhocCD1.cs
- RevocationPoint.cs
- PerformanceCounterManager.cs
- CurrencyWrapper.cs
- ConfigXmlCDataSection.cs
- SqlFunctions.cs
- sqlpipe.cs
- XmlSchemaRedefine.cs
- MethodCallConverter.cs
- SiteMap.cs
- HwndAppCommandInputProvider.cs
- MultiView.cs
- FontFamilyConverter.cs
- SerializationInfo.cs
- CodeIterationStatement.cs
- HitTestParameters.cs
- EntityType.cs
- InvalidProgramException.cs
- XmlUtil.cs
- HostedTransportConfigurationManager.cs
- InfiniteIntConverter.cs
- FacetDescription.cs
- XmlSchemaSimpleContent.cs
- GrammarBuilder.cs
- Triplet.cs
- TextTrailingCharacterEllipsis.cs
- Journal.cs
- Verify.cs
- XPathEmptyIterator.cs
- SystemWebCachingSectionGroup.cs
- GenericsNotImplementedException.cs
- RectangleGeometry.cs
- PreviewPageInfo.cs
- VectorCollection.cs
- RequestResizeEvent.cs
- RuleCache.cs
- CollectionDataContract.cs
- CharacterString.cs
- JulianCalendar.cs
- CodeBinaryOperatorExpression.cs
- NetMsmqSecurity.cs
- ContainerVisual.cs
- XmlWellformedWriter.cs
- BaseCodePageEncoding.cs
- DurableRuntimeValidator.cs
- TimeoutConverter.cs
- OrderedDictionaryStateHelper.cs
- AppDomainProtocolHandler.cs
- SmiRequestExecutor.cs
- WsdlHelpGeneratorElement.cs
- ExtendedPropertiesHandler.cs
- SqlClientPermission.cs
- HttpWriter.cs
- Content.cs
- CqlErrorHelper.cs
- ProviderException.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- SynchronizedRandom.cs
- DynamicMethod.cs
- SecurityContext.cs
- CreateUserWizardAutoFormat.cs
- CommandHelpers.cs
- PolyBezierSegment.cs
- OSEnvironmentHelper.cs
- ParserContext.cs
- PointAnimationUsingPath.cs
- Operators.cs
- WebPartManager.cs
- RegexStringValidator.cs
- ControlUtil.cs
- XmlAnyElementAttribute.cs
- NotFiniteNumberException.cs