Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / ComIntegration / ComPlusServiceLoader.cs / 1 / ComPlusServiceLoader.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.ComIntegration { using System; using System.ServiceModel.Description; using System.ServiceModel; using System.ServiceModel.Activation; using System.Diagnostics; using System.ServiceModel.Diagnostics; class ComPlusServiceLoader { ServiceInfo info; ConfigLoader configLoader; ComPlusTypeLoader typeLoader; public ComPlusServiceLoader (ServiceInfo info) { this.info = info; this.typeLoader = new ComPlusTypeLoader(info); this.configLoader = new ConfigLoader(typeLoader); } public ServiceDescription Load(ServiceHostBase host) { ServiceDescription service = new ServiceDescription(this.info.ServiceName); // ServiceBehaviorAttribute needs to go first in the behaviors collection (before config stuff) AddBehaviors(service); this.configLoader.LoadServiceDescription(host, service, this.info.ServiceElement, host.LoadConfigurationSectionHelper); ValidateConfigInstanceSettings(service); ComPlusServiceHostTrace.Trace(TraceEventType.Information, TraceCode.ComIntegrationServiceHostCreatedServiceEndpoint, SR.TraceCodeComIntegrationServiceHostCreatedServiceEndpoint, this.info, service.Endpoints); return service; } void AddBehaviors(ServiceDescription service) { // The philosophy here is to respect settings from configuration // At the moment, none of the settings we care about can be modified // through configuration. That may change in the future. // However, we never want to silently overwrite a user's configuration. // So we should either accept overrides or reject them, but never // silently update them. // ServiceBehaviorAttribute serviceBehavior = EnsureBehaviorAttribute(service); serviceBehavior.InstanceProvider = new ComPlusInstanceProvider(this.info); serviceBehavior.InstanceContextMode = InstanceContextMode.Single; // SHOULD: There is no reason to not allow concurrency at this level serviceBehavior.ConcurrencyMode = ConcurrencyMode.Multiple; serviceBehavior.UseSynchronizationContext = false; service.Behaviors.Add(new SecurityCookieModeValidator()); if (ServiceHostingEnvironment.IsHosted) { AspNetCompatibilityRequirementsAttribute aspNetCompatibilityRequirements = service.Behaviors.Find(); if (aspNetCompatibilityRequirements == null) { aspNetCompatibilityRequirements = new AspNetCompatibilityRequirementsAttribute(); service.Behaviors.Add(aspNetCompatibilityRequirements); } } } ServiceBehaviorAttribute EnsureBehaviorAttribute(ServiceDescription service) { ServiceBehaviorAttribute serviceBehavior; if (service.Behaviors.Contains(typeof(ServiceBehaviorAttribute))) { serviceBehavior = (ServiceBehaviorAttribute)service.Behaviors[typeof(ServiceBehaviorAttribute)]; } else { serviceBehavior = new ServiceBehaviorAttribute(); service.Behaviors.Insert(0, serviceBehavior); } return serviceBehavior; } void ValidateConfigInstanceSettings(ServiceDescription service) { ServiceBehaviorAttribute serviceBehavior = EnsureBehaviorAttribute(service); foreach (ServiceEndpoint endpoint in service.Endpoints) { if (endpoint != null && !ServiceMetadataBehavior.IsMetadataEndpoint(service, endpoint)) { if (endpoint.Contract.SessionMode == SessionMode.Required) { if (serviceBehavior.InstanceContextMode == InstanceContextMode.PerCall) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(System.ServiceModel.ComIntegration.Error.InconsistentSessionRequirements()); serviceBehavior.InstanceContextMode = InstanceContextMode.PerSession; } else { if (serviceBehavior.InstanceContextMode == InstanceContextMode.PerSession) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(System.ServiceModel.ComIntegration.Error.InconsistentSessionRequirements()); serviceBehavior.InstanceContextMode = InstanceContextMode.PerCall; } } } if (serviceBehavior.InstanceContextMode == InstanceContextMode.Single) serviceBehavior.InstanceContextMode = InstanceContextMode.PerSession; } } } // 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
- WindowsAuthenticationModule.cs
- Vertex.cs
- PseudoWebRequest.cs
- DynamicArgumentDesigner.xaml.cs
- SafePipeHandle.cs
- CodeDomDesignerLoader.cs
- Psha1DerivedKeyGenerator.cs
- TextCharacters.cs
- SoapExtensionImporter.cs
- TypedReference.cs
- Pens.cs
- Renderer.cs
- MailAddressCollection.cs
- SQLDouble.cs
- ElementMarkupObject.cs
- HttpDictionary.cs
- CustomAttributeBuilder.cs
- TextRunProperties.cs
- CaseInsensitiveOrdinalStringComparer.cs
- FolderBrowserDialogDesigner.cs
- DataPagerFieldCollection.cs
- InputLanguageSource.cs
- StatusStrip.cs
- ImageMetadata.cs
- Container.cs
- CqlErrorHelper.cs
- TextBounds.cs
- CachingHintValidation.cs
- ConfigurationElementProperty.cs
- ScrollEvent.cs
- SwitchElementsCollection.cs
- SQLDouble.cs
- RNGCryptoServiceProvider.cs
- ReflectionUtil.cs
- AnnotationStore.cs
- FileInfo.cs
- Style.cs
- cookiecollection.cs
- EventLogInformation.cs
- Line.cs
- cookieexception.cs
- StoreItemCollection.Loader.cs
- EntityDataSourceDesignerHelper.cs
- CompilationUnit.cs
- ViewStateException.cs
- OperandQuery.cs
- RouteParameter.cs
- RijndaelCryptoServiceProvider.cs
- MetadataCache.cs
- EntityContainerEntitySetDefiningQuery.cs
- RelatedEnd.cs
- BooleanToVisibilityConverter.cs
- _CommandStream.cs
- XamlToRtfParser.cs
- SendKeys.cs
- GridViewRowEventArgs.cs
- VectorAnimationUsingKeyFrames.cs
- XmlIncludeAttribute.cs
- RequestQueryProcessor.cs
- ComplexBindingPropertiesAttribute.cs
- VolatileEnlistmentState.cs
- FloaterBaseParaClient.cs
- NamespaceEmitter.cs
- HttpRequestWrapper.cs
- IISUnsafeMethods.cs
- HttpModulesSection.cs
- ConfigurationCollectionAttribute.cs
- RawTextInputReport.cs
- Animatable.cs
- OperationCanceledException.cs
- ObjectComplexPropertyMapping.cs
- ToolStripScrollButton.cs
- CommentEmitter.cs
- PreviousTrackingServiceAttribute.cs
- bindurihelper.cs
- DocumentAutomationPeer.cs
- EdmToObjectNamespaceMap.cs
- ToolStripItemClickedEventArgs.cs
- HealthMonitoringSection.cs
- AgileSafeNativeMemoryHandle.cs
- MatchingStyle.cs
- FacetChecker.cs
- RelationshipEntry.cs
- FontSourceCollection.cs
- PriorityRange.cs
- QueryServiceConfigHandle.cs
- TypeDescriptorContext.cs
- PenThreadPool.cs
- MaterialGroup.cs
- StructuralObject.cs
- DataControlFieldTypeEditor.cs
- Guid.cs
- PassportAuthenticationModule.cs
- SemanticAnalyzer.cs
- WebPartMovingEventArgs.cs
- LongTypeConverter.cs
- TableHeaderCell.cs
- TextInfo.cs
- ServiceNameCollection.cs
- DynamicILGenerator.cs