Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Data / System / Data / SqlClient / SqlConnectionPoolGroupProviderInfo.cs / 1 / SqlConnectionPoolGroupProviderInfo.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.SqlClient { using System; using System.Data; using System.Data.Common; using System.Data.ProviderBase; sealed internal class SqlConnectionPoolGroupProviderInfo : DbConnectionPoolGroupProviderInfo { private string _alias; private System.Security.PermissionSet _failoverPermissionSet; private string _failoverPartner; private bool _useFailoverPartner; internal SqlConnectionPoolGroupProviderInfo(SqlConnectionString connectionOptions) { // This is for the case where the user specified the failover partner // in the connection string and we have not yet connected to get the // env change. _failoverPartner = connectionOptions.FailoverPartner; if (ADP.IsEmpty(_failoverPartner)) { _failoverPartner = null; } } internal string FailoverPartner { get { return _failoverPartner; } } internal bool UseFailoverPartner { get { return _useFailoverPartner; } } internal void AliasCheck(string server) { if (_alias != server) { lock(this) { if (null == _alias) { _alias = server; } else if (_alias != server) { Bid.Trace("alias change detected. Clearing PoolGroup\n"); base.PoolGroup.Clear(); _alias = server; } } } } private System.Security.PermissionSet CreateFailoverPermission(SqlConnectionString userConnectionOptions, string actualFailoverPartner) { string keywordToReplace; // RULES FOR CONSTRUCTING THE CONNECTION STRING TO DEMAND ON: // // 1) If no Failover Partner was specified in the original string: // // Server=actualFailoverPartner // // 2) If Failover Partner was specified in the original string: // // Server=originalValue; Failover Partner=actualFailoverPartner // // NOTE: in all cases, when we get a failover partner name from // the server, we will use that name over what was specified // in the original connection string. if (null == userConnectionOptions[SqlConnectionString.KEY.FailoverPartner]) { keywordToReplace = SqlConnectionString.KEY.Data_Source; } else { keywordToReplace = SqlConnectionString.KEY.FailoverPartner; } string failoverConnectionString = userConnectionOptions.ExpandKeyword(keywordToReplace, actualFailoverPartner); return (new SqlConnectionString(failoverConnectionString)).CreatePermissionSet(); } internal void FailoverCheck(SqlInternalConnection connection, bool actualUseFailoverPartner, SqlConnectionString userConnectionOptions, string actualFailoverPartner) { if (UseFailoverPartner != actualUseFailoverPartner) { // Bid.Trace(" Failover detected. failover partner='%ls'. Clearing PoolGroup\n", actualFailoverPartner); base.PoolGroup.Clear(); _useFailoverPartner = actualUseFailoverPartner; } // Only construct a new permission set when we're connecting to the // primary data source, not the failover partner. if (!_useFailoverPartner && _failoverPartner != actualFailoverPartner) { // NOTE: we optimisitically generate the permission set to keep // lock short, but we only do this when we get a new // failover partner. // System.Security.PermissionSet failoverPermissionSet = CreateFailoverPermission(userConnectionOptions, actualFailoverPartner); lock (this) { if (_failoverPartner != actualFailoverPartner) { _failoverPartner = actualFailoverPartner; _failoverPermissionSet = failoverPermissionSet; } } } } internal void FailoverPermissionDemand() { if (_useFailoverPartner) { // Note that we only demand when there is a permission set, which only // happens once we've identified a failover situation in FailoverCheck System.Security.PermissionSet failoverPermissionSet = _failoverPermissionSet; if (null != failoverPermissionSet) { // demand on pooled failover connections failoverPermissionSet.Demand(); } } } } } // 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
- DbConnectionStringCommon.cs
- XmlSchemaValidationException.cs
- SerializationObjectManager.cs
- TabPage.cs
- ExtensionSimplifierMarkupObject.cs
- DataErrorValidationRule.cs
- AmbientLight.cs
- DataGridViewAccessibleObject.cs
- RecognitionResult.cs
- SafeFileMappingHandle.cs
- OutputScopeManager.cs
- SqlPersonalizationProvider.cs
- DialogDivider.cs
- AdRotator.cs
- RewritingProcessor.cs
- RecognizerInfo.cs
- log.cs
- MenuAutomationPeer.cs
- TextModifierScope.cs
- MailHeaderInfo.cs
- SQLInt64.cs
- SessionState.cs
- BinaryNegotiation.cs
- NotificationContext.cs
- LateBoundBitmapDecoder.cs
- DiscoveryEndpointValidator.cs
- HtmlTextArea.cs
- NoneExcludedImageIndexConverter.cs
- TextServicesProperty.cs
- StoreAnnotationsMap.cs
- PageBuildProvider.cs
- NativeMethods.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- SelectionProcessor.cs
- AnnotationObservableCollection.cs
- ResourceCollectionInfo.cs
- SqlReferenceCollection.cs
- ItemList.cs
- EdgeProfileValidation.cs
- TransactionProtocolConverter.cs
- MouseDevice.cs
- Int16Converter.cs
- ColumnMapTranslator.cs
- MexHttpBindingElement.cs
- MarkupCompilePass1.cs
- MobileControlsSectionHelper.cs
- HttpResponseInternalBase.cs
- IChannel.cs
- TdsValueSetter.cs
- SelectManyQueryOperator.cs
- StrongTypingException.cs
- DataGridViewComboBoxColumn.cs
- ToolStripLocationCancelEventArgs.cs
- PointAnimationClockResource.cs
- ChildTable.cs
- ClosableStream.cs
- ConfigXmlWhitespace.cs
- PropertyPath.cs
- CapabilitiesAssignment.cs
- Rect.cs
- ResourceKey.cs
- ListDataHelper.cs
- Version.cs
- Button.cs
- TextDataBindingHandler.cs
- NumberAction.cs
- InertiaRotationBehavior.cs
- SmtpClient.cs
- TextServicesDisplayAttribute.cs
- FacetDescriptionElement.cs
- InstanceNameConverter.cs
- CredentialSelector.cs
- SoapAttributeOverrides.cs
- SystemWebExtensionsSectionGroup.cs
- ContainsSearchOperator.cs
- HyperLinkField.cs
- TextSimpleMarkerProperties.cs
- X509ImageLogo.cs
- RoleService.cs
- DocumentViewerAutomationPeer.cs
- BooleanConverter.cs
- TemplateBindingExtensionConverter.cs
- SR.Designer.cs
- MouseWheelEventArgs.cs
- CustomSignedXml.cs
- SocketConnection.cs
- ExternalException.cs
- Console.cs
- MemberProjectionIndex.cs
- QueryExpression.cs
- DependencyObjectValidator.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- SecureStringHasher.cs
- UnionCodeGroup.cs
- WebPartCatalogAddVerb.cs
- ListControlBoundActionList.cs
- BuildManagerHost.cs
- ConfigsHelper.cs
- SchemaEntity.cs
- DbgCompiler.cs