Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / SqlClient / SqlConnectionPoolGroupProviderInfo.cs / 1305376 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XamlValidatingReader.cs
- CornerRadiusConverter.cs
- SQLCharsStorage.cs
- EnumConverter.cs
- FontStretches.cs
- BindingExpressionBase.cs
- TreeViewHitTestInfo.cs
- ImmutableObjectAttribute.cs
- XmlCompatibilityReader.cs
- ManagementException.cs
- ObjectDataSourceDisposingEventArgs.cs
- WorkflowTransactionOptions.cs
- QilSortKey.cs
- DataServiceHost.cs
- ColumnWidthChangedEvent.cs
- ZipIORawDataFileBlock.cs
- StringBuilder.cs
- Transform3DGroup.cs
- ConstrainedGroup.cs
- UrlUtility.cs
- ResXBuildProvider.cs
- FirstMatchCodeGroup.cs
- MouseGesture.cs
- KnownBoxes.cs
- FrameworkElementFactoryMarkupObject.cs
- ScrollProviderWrapper.cs
- ConfigViewGenerator.cs
- MobileControlPersister.cs
- SystemSounds.cs
- OutputCacheSettingsSection.cs
- SmiRequestExecutor.cs
- Int16Animation.cs
- GlobalizationSection.cs
- TabControl.cs
- TypefaceMetricsCache.cs
- XhtmlBasicCalendarAdapter.cs
- GridViewSelectEventArgs.cs
- RichTextBoxConstants.cs
- ErrorLog.cs
- FlowLayout.cs
- KeyValueInternalCollection.cs
- translator.cs
- BaseInfoTable.cs
- BitmapEffectGroup.cs
- DivideByZeroException.cs
- CLSCompliantAttribute.cs
- Currency.cs
- XmlNodeList.cs
- ToolStripPanel.cs
- CookielessHelper.cs
- Part.cs
- ContentPlaceHolder.cs
- SafeRightsManagementPubHandle.cs
- FactoryGenerator.cs
- DateTimePicker.cs
- AttachmentService.cs
- DoubleAnimationClockResource.cs
- ClientUtils.cs
- SafeNativeMethodsOther.cs
- SelectionProcessor.cs
- SelectionListDesigner.cs
- WebScriptMetadataMessageEncoderFactory.cs
- LeftCellWrapper.cs
- WpfGeneratedKnownTypes.cs
- FamilyTypefaceCollection.cs
- CompilerParameters.cs
- VScrollProperties.cs
- XsdBuildProvider.cs
- Rect3DConverter.cs
- VirtualPathProvider.cs
- DrawingState.cs
- ReadOnlyCollectionBase.cs
- BitmapCodecInfoInternal.cs
- recordstatefactory.cs
- DesignParameter.cs
- TypedElement.cs
- SaveCardRequest.cs
- TableLayoutStyle.cs
- UrlMappingsSection.cs
- InvariantComparer.cs
- SqlFacetAttribute.cs
- DbParameterHelper.cs
- ControlPaint.cs
- HttpConfigurationContext.cs
- HttpContext.cs
- Decoder.cs
- HttpClientCertificate.cs
- FormViewPageEventArgs.cs
- SamlAttributeStatement.cs
- SamlAudienceRestrictionCondition.cs
- ObjectQueryProvider.cs
- DataRelation.cs
- wgx_render.cs
- SqlMethodTransformer.cs
- PropertyManager.cs
- CultureData.cs
- ToolStripSeparatorRenderEventArgs.cs
- TextPointerBase.cs
- DbConnectionHelper.cs
- CategoryGridEntry.cs