Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- Thread.cs
- EventMap.cs
- ExpressionStringBuilder.cs
- EditorPartChrome.cs
- PolyLineSegmentFigureLogic.cs
- BasicHttpBindingCollectionElement.cs
- SHA1CryptoServiceProvider.cs
- ImageAutomationPeer.cs
- LoginView.cs
- SecuritySessionClientSettings.cs
- BaseInfoTable.cs
- FormsAuthenticationTicket.cs
- SafeFindHandle.cs
- BaseAppDomainProtocolHandler.cs
- DbDataReader.cs
- HandleCollector.cs
- ListViewItem.cs
- DocumentViewerAutomationPeer.cs
- AssociatedControlConverter.cs
- SpStreamWrapper.cs
- InputScopeAttribute.cs
- EtwTrace.cs
- IDictionary.cs
- SimpleType.cs
- Command.cs
- ExclusiveCanonicalizationTransform.cs
- DBConcurrencyException.cs
- QuaternionKeyFrameCollection.cs
- ContainerAction.cs
- DrawingImage.cs
- Parameter.cs
- CheckedListBox.cs
- AdjustableArrowCap.cs
- SessionStateModule.cs
- SetIterators.cs
- RegistryExceptionHelper.cs
- DeferredSelectedIndexReference.cs
- HotSpotCollection.cs
- CodePrimitiveExpression.cs
- PathTooLongException.cs
- DataColumn.cs
- DatePickerDateValidationErrorEventArgs.cs
- PropertyChangedEventArgs.cs
- CopyAction.cs
- PrintPreviewControl.cs
- ParenthesizePropertyNameAttribute.cs
- MeshGeometry3D.cs
- DataGridColumnFloatingHeader.cs
- DataGridViewCellStyleChangedEventArgs.cs
- TextEditorSpelling.cs
- PopupRootAutomationPeer.cs
- SQLDateTimeStorage.cs
- GroupBoxRenderer.cs
- DataStreams.cs
- TextElementEnumerator.cs
- TrustManagerPromptUI.cs
- SupportsPreviewControlAttribute.cs
- Application.cs
- SiteIdentityPermission.cs
- NameValuePair.cs
- WebPartDisplayMode.cs
- DoWorkEventArgs.cs
- MarshalByRefObject.cs
- FreezableOperations.cs
- PropertyItem.cs
- CursorConverter.cs
- AppDomainProtocolHandler.cs
- SecurityManager.cs
- IdentityReference.cs
- BitStack.cs
- ToolBarButton.cs
- PasswordPropertyTextAttribute.cs
- VirtualPathProvider.cs
- DocumentGridContextMenu.cs
- ScalarRestriction.cs
- MatrixCamera.cs
- JumpPath.cs
- GrammarBuilderWildcard.cs
- UnknownBitmapEncoder.cs
- Timeline.cs
- SamlConditions.cs
- MemberInitExpression.cs
- RightsManagementResourceHelper.cs
- AccessViolationException.cs
- BulletChrome.cs
- GridSplitterAutomationPeer.cs
- DataMemberConverter.cs
- TcpChannelHelper.cs
- ResXResourceReader.cs
- BorderGapMaskConverter.cs
- TypeUsageBuilder.cs
- SoundPlayer.cs
- AppDomainUnloadedException.cs
- WebContext.cs
- AssemblyCollection.cs
- FieldDescriptor.cs
- PropertyDescriptorGridEntry.cs
- SQLBinary.cs
- ObjectDataSourceSelectingEventArgs.cs
- XmlAttributeProperties.cs