Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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. // //[....] //[....] //----------------------------------------------------------------------------- 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
- ZipIOModeEnforcingStream.cs
- SelectQueryOperator.cs
- TimeSpanOrInfiniteConverter.cs
- TraceHwndHost.cs
- UriScheme.cs
- BasePropertyDescriptor.cs
- AttachedPropertiesService.cs
- OpCodes.cs
- UriSchemeKeyedCollection.cs
- ReadWriteObjectLock.cs
- ExpressionBuilderContext.cs
- ListItemConverter.cs
- RegistryKey.cs
- WMICapabilities.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- ApplicationId.cs
- SafeNativeMethods.cs
- InputLanguageManager.cs
- ScrollProperties.cs
- ImageListImageEditor.cs
- ManagedFilter.cs
- WebServicesInteroperability.cs
- RangeValuePatternIdentifiers.cs
- SymmetricAlgorithm.cs
- XMLSyntaxException.cs
- QueryCacheKey.cs
- WebCategoryAttribute.cs
- SecurityCriticalDataForSet.cs
- InstanceDataCollectionCollection.cs
- DataRowChangeEvent.cs
- XmlWriterDelegator.cs
- ExpressionBuilderCollection.cs
- HtmlTableRow.cs
- ObjectStateFormatter.cs
- ProfileModule.cs
- HttpResponseWrapper.cs
- PopOutPanel.cs
- StylusEventArgs.cs
- StoreAnnotationsMap.cs
- HotSpot.cs
- BaseParagraph.cs
- TypeInfo.cs
- ColumnMapVisitor.cs
- DataGridViewRowCancelEventArgs.cs
- KeyValueSerializer.cs
- SimpleMailWebEventProvider.cs
- Mutex.cs
- XmlSchemaSubstitutionGroup.cs
- ViewUtilities.cs
- DataSourceCacheDurationConverter.cs
- DeviceContext.cs
- EndPoint.cs
- SqlBuilder.cs
- AppDomain.cs
- DataGridViewRowsRemovedEventArgs.cs
- XmlUTF8TextReader.cs
- SqlDataSourceSelectingEventArgs.cs
- BCryptSafeHandles.cs
- MutexSecurity.cs
- TextAutomationPeer.cs
- UpDownEvent.cs
- Size3D.cs
- FileDialogCustomPlacesCollection.cs
- FormsAuthentication.cs
- FormsIdentity.cs
- WebPartHeaderCloseVerb.cs
- StringSource.cs
- ValidationErrorEventArgs.cs
- EncoderReplacementFallback.cs
- VSDExceptions.cs
- AQNBuilder.cs
- ExpressionNormalizer.cs
- MouseBinding.cs
- ListViewGroupConverter.cs
- WebPartEditorCancelVerb.cs
- ContractMethodInfo.cs
- PreviewControlDesigner.cs
- ContentPlaceHolder.cs
- PathGeometry.cs
- ParallelQuery.cs
- DataGridViewSortCompareEventArgs.cs
- MessagePartDescriptionCollection.cs
- DataPagerField.cs
- ToolStripSplitButton.cs
- FormViewModeEventArgs.cs
- Rule.cs
- MetadataUtilsSmi.cs
- TraceListeners.cs
- MailWebEventProvider.cs
- KeyInfo.cs
- ClientSession.cs
- Line.cs
- SystemKeyConverter.cs
- Pair.cs
- XmlIlGenerator.cs
- BulletDecorator.cs
- SizeLimitedCache.cs
- RTLAwareMessageBox.cs
- XmlNamespaceDeclarationsAttribute.cs
- WizardStepBase.cs