Code:
/ DotNET / DotNET / 8.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
- CheckBox.cs
- figurelength.cs
- TextProperties.cs
- GridViewDeletedEventArgs.cs
- Sql8ExpressionRewriter.cs
- shaper.cs
- TextRangeEditLists.cs
- WebCategoryAttribute.cs
- AlphaSortedEnumConverter.cs
- BaseDataBoundControl.cs
- EntityDataSourceWrapper.cs
- TextParagraphCache.cs
- StrongNameUtility.cs
- StrongNameIdentityPermission.cs
- ObjectParameter.cs
- MailDefinition.cs
- XmlSchemaSubstitutionGroup.cs
- Menu.cs
- BinaryObjectWriter.cs
- BrowserCapabilitiesCodeGenerator.cs
- VisualCollection.cs
- CompileLiteralTextParser.cs
- StreamGeometry.cs
- DiscoveryDocumentReference.cs
- MenuCommand.cs
- SerializationStore.cs
- LinkLabel.cs
- ToolboxBitmapAttribute.cs
- BitmapSizeOptions.cs
- Typography.cs
- RegisteredDisposeScript.cs
- FacetEnabledSchemaElement.cs
- CheckBox.cs
- WebPartCloseVerb.cs
- FixedMaxHeap.cs
- TextHidden.cs
- SqlReorderer.cs
- EvidenceBase.cs
- Activator.cs
- RuleSettingsCollection.cs
- NativeMethodsOther.cs
- DesignerDataStoredProcedure.cs
- SymbolEqualComparer.cs
- XmlNamespaceManager.cs
- ColorConverter.cs
- SqlFlattener.cs
- PropertyKey.cs
- recordstatefactory.cs
- ProtocolsSection.cs
- SourceInterpreter.cs
- ReaderContextStackData.cs
- BamlRecords.cs
- XmlSchemaAppInfo.cs
- StreamWithDictionary.cs
- GestureRecognitionResult.cs
- ConfigXmlReader.cs
- ComPlusSynchronizationContext.cs
- QuaternionKeyFrameCollection.cs
- AppDomainProtocolHandler.cs
- EntityKeyElement.cs
- SetStoryboardSpeedRatio.cs
- EdmScalarPropertyAttribute.cs
- ObjectList.cs
- Calendar.cs
- TabPage.cs
- MenuCommandsChangedEventArgs.cs
- SemanticAnalyzer.cs
- DrawingVisualDrawingContext.cs
- DeviceContext.cs
- SelectorAutomationPeer.cs
- Serializer.cs
- CustomAttributeBuilder.cs
- DCSafeHandle.cs
- GlobalEventManager.cs
- ProfilePropertyNameValidator.cs
- Assembly.cs
- StreamAsIStream.cs
- UserMapPath.cs
- GlobalEventManager.cs
- SectionVisual.cs
- Sql8ExpressionRewriter.cs
- ModelPropertyCollectionImpl.cs
- DbConnectionStringCommon.cs
- BezierSegment.cs
- ObjectViewListener.cs
- QueryPageSettingsEventArgs.cs
- UnsafeNativeMethodsPenimc.cs
- xmlsaver.cs
- Int32Animation.cs
- ValuePatternIdentifiers.cs
- PlatformCulture.cs
- XhtmlBasicLinkAdapter.cs
- EntityUtil.cs
- BitmapPalettes.cs
- unsafeIndexingFilterStream.cs
- SecurityKeyIdentifierClause.cs
- TextAdaptor.cs
- EntitySetBase.cs
- XmlSchemaImport.cs
- BoundColumn.cs