Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / SecurityListenerSettingsLifetimeManager.cs / 1 / SecurityListenerSettingsLifetimeManager.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- using System; using System.Threading; using System.ServiceModel; using System.ServiceModel.Channels; using System.Collections.Generic; namespace System.ServiceModel.Security { class SecurityListenerSettingsLifetimeManager { SecurityProtocolFactory securityProtocolFactory; SecuritySessionServerSettings sessionSettings; bool sessionMode; IChannelListener innerListener; int referenceCount; public SecurityListenerSettingsLifetimeManager(SecurityProtocolFactory securityProtocolFactory, SecuritySessionServerSettings sessionSettings, bool sessionMode, IChannelListener innerListener) { this.securityProtocolFactory = securityProtocolFactory; this.sessionSettings = sessionSettings; this.sessionMode = sessionMode; this.innerListener = innerListener; // have a reference right from the start so that the state can be aborted before open referenceCount = 1; } public void Abort() { if (Interlocked.Decrement(ref this.referenceCount) == 0) { AbortCore(); } } public void AddReference() { Interlocked.Increment(ref this.referenceCount); } public void Open(TimeSpan timeout) { TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); if (this.securityProtocolFactory != null) { this.securityProtocolFactory.Open(false, timeoutHelper.RemainingTime()); } if (this.sessionMode && this.sessionSettings != null) { this.sessionSettings.Open(timeoutHelper.RemainingTime()); } this.innerListener.Open(timeoutHelper.RemainingTime()); } public IAsyncResult BeginOpen(TimeSpan timeout, AsyncCallback callback, object state) { ListbeginOperations = new List (3); List endOperations = new List (3); if (this.securityProtocolFactory != null) { beginOperations.Add(new OperationWithTimeoutBeginCallback(this.BeginOpenSecurityProtocolFactory)); endOperations.Add(new OperationEndCallback(this.EndOpenSecurityProtocolFactory)); } if (this.sessionMode && this.sessionSettings != null) { beginOperations.Add(new OperationWithTimeoutBeginCallback(this.sessionSettings.BeginOpen)); endOperations.Add(new OperationEndCallback(this.sessionSettings.EndOpen)); } beginOperations.Add(new OperationWithTimeoutBeginCallback(this.innerListener.BeginOpen)); endOperations.Add(new OperationEndCallback(this.innerListener.EndOpen)); return OperationWithTimeoutComposer.BeginComposeAsyncOperations(timeout, beginOperations.ToArray(), endOperations.ToArray(), callback, state); } public void EndOpen(IAsyncResult result) { OperationWithTimeoutComposer.EndComposeAsyncOperations(result); } IAsyncResult BeginOpenSecurityProtocolFactory(TimeSpan timeout, AsyncCallback callback, object state) { return this.securityProtocolFactory.BeginOpen(false, timeout, callback, state); } void EndOpenSecurityProtocolFactory(IAsyncResult result) { this.securityProtocolFactory.EndOpen(result); } public void Close(TimeSpan timeout) { if (Interlocked.Decrement(ref this.referenceCount) == 0) { TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); bool throwing = true; try { if (this.securityProtocolFactory != null) { this.securityProtocolFactory.Close(false, timeoutHelper.RemainingTime()); } if (sessionMode && sessionSettings != null) { this.sessionSettings.Close(timeoutHelper.RemainingTime()); } this.innerListener.Close(timeoutHelper.RemainingTime()); throwing = false; } finally { if (throwing) { AbortCore(); } } } } public IAsyncResult BeginClose(TimeSpan timeout, AsyncCallback callback, object state) { if (Interlocked.Decrement(ref this.referenceCount) == 0) { bool throwing = true; try { List beginOperations = new List (3); List endOperations = new List (3); if (this.securityProtocolFactory != null) { beginOperations.Add(new OperationWithTimeoutBeginCallback(this.securityProtocolFactory.BeginClose)); endOperations.Add(new OperationEndCallback(this.securityProtocolFactory.EndClose)); } if (this.sessionMode && this.sessionSettings != null) { beginOperations.Add(new OperationWithTimeoutBeginCallback(this.sessionSettings.BeginClose)); endOperations.Add(new OperationEndCallback(this.sessionSettings.EndClose)); } beginOperations.Add(new OperationWithTimeoutBeginCallback(this.innerListener.BeginClose)); endOperations.Add(new OperationEndCallback(this.innerListener.EndClose)); IAsyncResult result = OperationWithTimeoutComposer.BeginComposeAsyncOperations(timeout, beginOperations.ToArray(), endOperations.ToArray(), callback, state); throwing = false; return result; } finally { if (throwing) { AbortCore(); } } } else { return new DummyCloseAsyncResult(callback, state); } } public void EndClose(IAsyncResult result) { if (result is DummyCloseAsyncResult) { DummyCloseAsyncResult.End(result); } else { bool throwing = true; try { OperationWithTimeoutComposer.EndComposeAsyncOperations(result); throwing = false; } finally { if (throwing) { AbortCore(); } } } } void AbortCore() { if (this.securityProtocolFactory != null) { this.securityProtocolFactory.Close(true, TimeSpan.Zero); } if (sessionMode && this.sessionSettings != null) { this.sessionSettings.Abort(); } this.innerListener.Abort(); } class DummyCloseAsyncResult : CompletedAsyncResult { public DummyCloseAsyncResult(AsyncCallback callback, object state) : base(callback, state) { } new public static void End(IAsyncResult result) { AsyncResult.End (result); } } } } // 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
- XPathDocumentNavigator.cs
- DescendentsWalkerBase.cs
- TripleDES.cs
- EditorOptionAttribute.cs
- SqlBulkCopy.cs
- ObjectListFieldCollection.cs
- CompositionAdorner.cs
- Button.cs
- ListViewItemEventArgs.cs
- SymbolUsageManager.cs
- XmlEnumAttribute.cs
- MultiView.cs
- SqlWebEventProvider.cs
- CancelEventArgs.cs
- CharAnimationBase.cs
- CaseInsensitiveHashCodeProvider.cs
- BindingWorker.cs
- PropertyChangeTracker.cs
- ToolStripItemRenderEventArgs.cs
- RequestQueue.cs
- StoreAnnotationsMap.cs
- DeviceContext.cs
- ZipIOExtraFieldElement.cs
- TraceHandler.cs
- BaseConfigurationRecord.cs
- CustomError.cs
- SmiMetaData.cs
- AssemblySettingAttributes.cs
- DocobjHost.cs
- SectionInput.cs
- LogEntryHeaderSerializer.cs
- DataAdapter.cs
- ToolStripSeparator.cs
- TreeView.cs
- DataMemberFieldConverter.cs
- BamlLocalizableResource.cs
- SHA1.cs
- Section.cs
- CodeThrowExceptionStatement.cs
- Light.cs
- SecurityPolicySection.cs
- PrintDialog.cs
- RegistryExceptionHelper.cs
- DateTimeConstantAttribute.cs
- RtfFormatStack.cs
- AddressUtility.cs
- ExtenderProviderService.cs
- JsonFormatGeneratorStatics.cs
- ClientScriptItemCollection.cs
- sitestring.cs
- HelloMessageApril2005.cs
- ZipIOBlockManager.cs
- TreeView.cs
- LingerOption.cs
- SqlWebEventProvider.cs
- StreamUpgradeProvider.cs
- SessionSymmetricTransportSecurityProtocolFactory.cs
- ReflectPropertyDescriptor.cs
- DBDataPermissionAttribute.cs
- InstanceStoreQueryResult.cs
- AsymmetricSecurityProtocol.cs
- ReplacementText.cs
- LexicalChunk.cs
- PrincipalPermission.cs
- ISCIIEncoding.cs
- ActivityCodeDomSerializationManager.cs
- SerialErrors.cs
- SmiEventSink_DeferedProcessing.cs
- CustomSignedXml.cs
- RegexCompilationInfo.cs
- SoapClientMessage.cs
- ConsumerConnectionPoint.cs
- DiscoveryClientRequestChannel.cs
- ApplicationServicesHostFactory.cs
- CanonicalizationDriver.cs
- RuntimeResourceSet.cs
- TokenizerHelper.cs
- DisplayNameAttribute.cs
- SecureStringHasher.cs
- ObjectPersistData.cs
- sqlnorm.cs
- XPathItem.cs
- Helper.cs
- CodeThrowExceptionStatement.cs
- ProcessHost.cs
- EventSinkHelperWriter.cs
- PropertyFilterAttribute.cs
- VSWCFServiceContractGenerator.cs
- DeferredElementTreeState.cs
- ProvidePropertyAttribute.cs
- DurationConverter.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- DesignTimeTemplateParser.cs
- TrustManager.cs
- SortExpressionBuilder.cs
- Vector3DValueSerializer.cs
- ObjectStorage.cs
- LocalValueEnumerator.cs
- DetailsViewCommandEventArgs.cs
- FormsAuthenticationCredentials.cs