Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / ServiceBehaviorAttribute.cs / 1 / ServiceBehaviorAttribute.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel
{
using System.ServiceModel.Administration;
using System.ServiceModel.Channels;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Description;
using System.ServiceModel.Configuration;
using System.Runtime.Serialization;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Threading;
using System.Transactions;
using System.Runtime.CompilerServices;
[AttributeUsage(ServiceModelAttributeTargets.ServiceBehavior)]
public sealed class ServiceBehaviorAttribute : Attribute, IServiceBehavior
{
internal static IsolationLevel DefaultIsolationLevel = IsolationLevel.Unspecified;
ConcurrencyMode concurrencyMode = ConcurrencyMode.Single;
string configurationName;
bool includeExceptionDetailInFaults = false;
InstanceContextMode instanceMode;
bool releaseServiceInstanceOnTransactionComplete = true;
bool releaseServiceInstanceOnTransactionCompleteSet = false;
bool transactionAutoCompleteOnSessionClose = false;
bool transactionAutoCompleteOnSessionCloseSet = false;
object wellKnownSingleton = null; // if the user passes an object to the ServiceHost, it is stored here
object hiddenSingleton = null; // if the user passes a type to the ServiceHost, and instanceMode==Single, we store the instance here
bool validateMustUnderstand = true;
bool ignoreExtensionDataObject = DataContractSerializerDefaults.IgnoreExtensionDataObject;
int maxItemsInObjectGraph = DataContractSerializerDefaults.MaxItemsInObjectGraph;
IsolationLevel transactionIsolationLevel = DefaultIsolationLevel;
bool isolationLevelSet = false;
bool automaticSessionShutdown = true;
IInstanceProvider instanceProvider = null;
TimeSpan transactionTimeout = TimeSpan.Zero;
string transactionTimeoutString;
bool transactionTimeoutSet = false;
bool useSynchronizationContext = true;
string serviceName = null;
string serviceNamespace = null;
AddressFilterMode addressFilterMode = AddressFilterMode.Exact;
public string Name
{
get { return serviceName; }
set { serviceName = value; }
}
public string Namespace
{
get { return serviceNamespace; }
set { serviceNamespace = value; }
}
internal IInstanceProvider InstanceProvider
{
set { this.instanceProvider = value; }
}
public AddressFilterMode AddressFilterMode
{
get { return this.addressFilterMode; }
set
{
if (!AddressFilterModeHelper.IsDefined(value))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
}
this.addressFilterMode = value;
}
}
public bool AutomaticSessionShutdown
{
get { return this.automaticSessionShutdown; }
set { this.automaticSessionShutdown = value; }
}
public string ConfigurationName
{
get { return this.configurationName; }
set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
}
if (value == string.Empty)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value",
SR.GetString(SR.SFxConfigurationNameCannotBeEmpty)));
}
this.configurationName = value;
}
}
public IsolationLevel TransactionIsolationLevel
{
get { return this.transactionIsolationLevel; }
set
{
switch (value)
{
case IsolationLevel.Serializable:
case IsolationLevel.RepeatableRead:
case IsolationLevel.ReadCommitted:
case IsolationLevel.ReadUncommitted:
case IsolationLevel.Unspecified:
case IsolationLevel.Chaos:
case IsolationLevel.Snapshot:
break;
default:
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
}
this.transactionIsolationLevel = value;
isolationLevelSet = true;
}
}
internal bool IsolationLevelSet
{
get { return this.isolationLevelSet; }
}
public bool IncludeExceptionDetailInFaults
{
get { return this.includeExceptionDetailInFaults; }
set { this.includeExceptionDetailInFaults = value; }
}
public ConcurrencyMode ConcurrencyMode
{
get { return this.concurrencyMode; }
set
{
if (!ConcurrencyModeHelper.IsDefined(value))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
}
this.concurrencyMode = value;
}
}
public InstanceContextMode InstanceContextMode
{
get { return this.instanceMode; }
set
{
if (!InstanceContextModeHelper.IsDefined(value))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
}
this.instanceMode = value;
}
}
public bool ReleaseServiceInstanceOnTransactionComplete
{
get { return releaseServiceInstanceOnTransactionComplete; }
set
{
this.releaseServiceInstanceOnTransactionComplete = value;
this.releaseServiceInstanceOnTransactionCompleteSet = true;
}
}
internal bool ReleaseServiceInstanceOnTransactionCompleteSet
{
get { return this.releaseServiceInstanceOnTransactionCompleteSet; }
}
public bool TransactionAutoCompleteOnSessionClose
{
get { return transactionAutoCompleteOnSessionClose; }
set
{
this.transactionAutoCompleteOnSessionClose = value;
this.transactionAutoCompleteOnSessionCloseSet = true;
}
}
internal bool TransactionAutoCompleteOnSessionCloseSet
{
get { return this.transactionAutoCompleteOnSessionCloseSet; }
}
public string TransactionTimeout
{
get { return transactionTimeoutString; }
set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("value"));
}
try
{
TimeSpan timeout = TimeSpan.Parse(value);
if (timeout < TimeSpan.Zero)
{
string message = SR.GetString(SR.SFxTimeoutOutOfRange0);
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value", value, message));
}
this.transactionTimeout = timeout;
this.transactionTimeoutString = value;
this.transactionTimeoutSet = true;
}
catch (FormatException e)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SFxTimeoutInvalidStringFormat), "value", e));
}
catch (OverflowException)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
}
}
}
internal TimeSpan TransactionTimeoutTimespan
{
get { return this.transactionTimeout; }
}
internal bool TransactionTimeoutSet
{
get { return this.transactionTimeoutSet; }
}
public bool ValidateMustUnderstand
{
get { return validateMustUnderstand; }
set { validateMustUnderstand = value; }
}
public bool IgnoreExtensionDataObject
{
get { return ignoreExtensionDataObject; }
set { ignoreExtensionDataObject = value; }
}
public int MaxItemsInObjectGraph
{
get { return maxItemsInObjectGraph; }
set { maxItemsInObjectGraph = value; }
}
public bool UseSynchronizationContext
{
get { return this.useSynchronizationContext; }
set { this.useSynchronizationContext = value; }
}
public object GetWellKnownSingleton()
{
return this.wellKnownSingleton;
}
public void SetWellKnownSingleton(object value)
{
if (value == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
this.wellKnownSingleton = value;
}
internal object GetHiddenSingleton()
{
return this.hiddenSingleton;
}
internal void SetHiddenSingleton(object value)
{
if (value == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
this.hiddenSingleton = value;
}
[MethodImpl(MethodImplOptions.NoInlining)]
void SetIsolationLevel(ChannelDispatcher channelDispatcher)
{
if (channelDispatcher == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("channelDispatcher");
channelDispatcher.TransactionIsolationLevel = this.transactionIsolationLevel;
}
void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase serviceHostBase)
{
}
void IServiceBehavior.AddBindingParameters(ServiceDescription description, ServiceHostBase serviceHostBase, Collection endpoints, BindingParameterCollection parameters)
{
}
void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase)
{
for (int i = 0; i < serviceHostBase.ChannelDispatchers.Count; i++)
{
ChannelDispatcher channelDispatcher = serviceHostBase.ChannelDispatchers[i] as ChannelDispatcher;
if (channelDispatcher != null)
{
channelDispatcher.IncludeExceptionDetailInFaults = this.includeExceptionDetailInFaults;
if (!ServiceMetadataBehavior.IsMetadataDispatcher(description, channelDispatcher))
{
channelDispatcher.TransactionTimeout = transactionTimeout;
if (isolationLevelSet)
SetIsolationLevel(channelDispatcher);
foreach (EndpointDispatcher endpointDispatcher in channelDispatcher.Endpoints)
{
DispatchRuntime behavior = endpointDispatcher.DispatchRuntime;
behavior.ConcurrencyMode = this.concurrencyMode;
behavior.ValidateMustUnderstand = validateMustUnderstand;
behavior.AutomaticInputSessionShutdown = this.automaticSessionShutdown;
behavior.TransactionAutoCompleteOnSessionClose = this.transactionAutoCompleteOnSessionClose;
behavior.ReleaseServiceInstanceOnTransactionComplete = this.releaseServiceInstanceOnTransactionComplete;
if (!this.useSynchronizationContext)
{
behavior.SynchronizationContext = null;
}
if (!endpointDispatcher.AddressFilterSetExplicit)
{
EndpointAddress address = endpointDispatcher.OriginalAddress;
if (address == null || this.AddressFilterMode == AddressFilterMode.Any)
{
endpointDispatcher.AddressFilter = new MatchAllMessageFilter();
}
else if (this.AddressFilterMode == AddressFilterMode.Prefix)
{
endpointDispatcher.AddressFilter = new PrefixEndpointAddressMessageFilter(address);
}
else if (this.AddressFilterMode == AddressFilterMode.Exact)
{
endpointDispatcher.AddressFilter = new EndpointAddressMessageFilter(address);
}
}
}
}
#pragma warning suppress 56506
}
}
DataContractSerializerServiceBehavior.ApplySerializationSettings(description, ignoreExtensionDataObject, maxItemsInObjectGraph);
ApplyInstancing(description, serviceHostBase);
}
void ApplyInstancing(ServiceDescription description, ServiceHostBase serviceHostBase)
{
Type serviceType = description.ServiceType;
InstanceContext singleton = null;
for (int i = 0; i < serviceHostBase.ChannelDispatchers.Count; i++)
{
ChannelDispatcher channelDispatcher = serviceHostBase.ChannelDispatchers[i] as ChannelDispatcher;
if (channelDispatcher != null && !ServiceMetadataBehavior.IsMetadataDispatcher(description, channelDispatcher))
{
foreach (EndpointDispatcher endpointDispatcher in channelDispatcher.Endpoints)
{
DispatchRuntime dispatch = endpointDispatcher.DispatchRuntime;
if (dispatch.InstanceProvider == null)
{
if (instanceProvider == null)
{
if (serviceType == null && this.wellKnownSingleton == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.InstanceSettingsMustHaveTypeOrWellKnownObject0)));
if (this.instanceMode != InstanceContextMode.Single && this.wellKnownSingleton != null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.SFxWellKnownNonSingleton0)));
}
else
{
dispatch.InstanceProvider = instanceProvider;
}
}
dispatch.Type = serviceType;
dispatch.InstanceContextProvider = InstanceContextProviderBase.GetProviderForMode(this.instanceMode, dispatch);
if ((this.instanceMode == InstanceContextMode.Single) &&
(dispatch.SingletonInstanceContext == null))
{
if (singleton == null)
{
if (this.wellKnownSingleton != null)
{
singleton = new InstanceContext(serviceHostBase, this.wellKnownSingleton, true, false);
}
else if (this.hiddenSingleton != null)
{
singleton = new InstanceContext(serviceHostBase, this.hiddenSingleton, false, false);
}
else
{
singleton = new InstanceContext(serviceHostBase, false);
}
singleton.AutoClose = false;
}
dispatch.SingletonInstanceContext = singleton;
}
}
}
}
}
}
}
// 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
- MediaPlayerState.cs
- TableLayoutPanel.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- ColumnWidthChangedEvent.cs
- PolyBezierSegment.cs
- SimpleTypeResolver.cs
- StdValidatorsAndConverters.cs
- SubqueryRules.cs
- TreeViewEvent.cs
- OracleParameterCollection.cs
- Transform.cs
- ObjectResult.cs
- ProtocolViolationException.cs
- ISAPIRuntime.cs
- DataContractAttribute.cs
- OrthographicCamera.cs
- SkewTransform.cs
- SerializationInfo.cs
- Binding.cs
- SourceSwitch.cs
- SessionStateSection.cs
- COM2IPerPropertyBrowsingHandler.cs
- MsmqOutputSessionChannel.cs
- AccessDataSourceView.cs
- LicenseException.cs
- WorkerRequest.cs
- InvokeGenerator.cs
- PathNode.cs
- AssociationProvider.cs
- ParameterCollection.cs
- MessageEncodingBindingElement.cs
- httpapplicationstate.cs
- WebPartManager.cs
- HyperLinkStyle.cs
- SplineQuaternionKeyFrame.cs
- DateTimeConverter2.cs
- PathFigureCollection.cs
- Int64KeyFrameCollection.cs
- BaseUriHelper.cs
- Error.cs
- TextSelection.cs
- PlainXmlWriter.cs
- ConstraintConverter.cs
- UserControlAutomationPeer.cs
- Stroke.cs
- AbstractDataSvcMapFileLoader.cs
- MetadataStore.cs
- WrappedIUnknown.cs
- MemoryRecordBuffer.cs
- Ref.cs
- XDeferredAxisSource.cs
- TrailingSpaceComparer.cs
- PropertyItemInternal.cs
- RefreshPropertiesAttribute.cs
- HierarchicalDataBoundControl.cs
- SymLanguageVendor.cs
- ToolStripMenuItemDesigner.cs
- SchemaElementLookUpTable.cs
- DurationConverter.cs
- Token.cs
- MediaContextNotificationWindow.cs
- DiagnosticsConfiguration.cs
- RemoteWebConfigurationHostStream.cs
- Directory.cs
- CodeExpressionStatement.cs
- HttpApplicationFactory.cs
- MailMessageEventArgs.cs
- OdbcEnvironmentHandle.cs
- OleDbCommand.cs
- ViewCellRelation.cs
- ConsoleCancelEventArgs.cs
- LassoSelectionBehavior.cs
- PeerCredential.cs
- ProfileGroupSettingsCollection.cs
- TypeInitializationException.cs
- SkinIDTypeConverter.cs
- UIElement3D.cs
- ContentElement.cs
- InputReportEventArgs.cs
- JsonServiceDocumentSerializer.cs
- _NTAuthentication.cs
- Membership.cs
- EdmType.cs
- SqlConnectionStringBuilder.cs
- OrderedDictionaryStateHelper.cs
- XmlIterators.cs
- GridToolTip.cs
- IProducerConsumerCollection.cs
- LazyTextWriterCreator.cs
- EditingCoordinator.cs
- TextElementCollectionHelper.cs
- Nodes.cs
- login.cs
- CommandExpr.cs
- Bold.cs
- NameValueSectionHandler.cs
- TypeReference.cs
- IndicShape.cs
- MdiWindowListItemConverter.cs
- LinkDescriptor.cs