Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / SecurityChannel.cs / 1 / SecurityChannel.cs
//----------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel.Security
{
using System.ServiceModel.Channels;
abstract class SecurityChannel :
LayeredChannel
where TChannel : class, IChannel
{
SecurityProtocol securityProtocol;
protected SecurityChannel(ChannelManagerBase channelManager, TChannel innerChannel)
: this(channelManager, innerChannel, null)
{
}
protected SecurityChannel(ChannelManagerBase channelManager, TChannel innerChannel, SecurityProtocol securityProtocol)
: base(channelManager, innerChannel)
{
this.securityProtocol = securityProtocol;
}
public override T GetProperty()
{
if(typeof(T) == typeof(FaultConverter))
{
return new SecurityChannelFaultConverter(this.InnerChannel) as T;
}
return base.GetProperty();
}
public SecurityProtocol SecurityProtocol
{
get
{
return this.securityProtocol;
}
protected set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("value"));
}
this.securityProtocol = value;
}
}
protected override void OnAbort()
{
if (this.securityProtocol != null)
{
this.securityProtocol.Close(true, TimeSpan.Zero);
}
base.OnAbort();
}
protected override IAsyncResult OnBeginClose(TimeSpan timeout, AsyncCallback callback, object state)
{
return new ChainedAsyncResult(timeout, callback, state, this.BeginCloseSecurityProtocol, this.EndCloseSecurityProtocol,
base.OnBeginClose, base.OnEndClose);
}
protected override void OnEndClose(IAsyncResult result)
{
ChainedAsyncResult.End(result);
}
IAsyncResult BeginCloseSecurityProtocol(TimeSpan timeout, AsyncCallback callback, object state)
{
if (this.securityProtocol != null)
{
return this.securityProtocol.BeginClose(timeout, callback, state);
}
else
{
return new NullSecurityProtocolCloseAsyncResult(callback, state);
}
}
void EndCloseSecurityProtocol(IAsyncResult result)
{
if (result is NullSecurityProtocolCloseAsyncResult)
{
NullSecurityProtocolCloseAsyncResult.End(result);
}
else
{
this.securityProtocol.EndClose(result);
}
}
protected override void OnClose(TimeSpan timeout)
{
TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);
if (this.securityProtocol != null)
{
this.securityProtocol.Close(false, timeoutHelper.RemainingTime());
}
base.OnClose(timeoutHelper.RemainingTime());
}
protected void ThrowIfDisposedOrNotOpen(Message message)
{
ThrowIfDisposedOrNotOpen();
if (message == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message");
}
}
class NullSecurityProtocolCloseAsyncResult : CompletedAsyncResult
{
public NullSecurityProtocolCloseAsyncResult(AsyncCallback callback, object state)
: base(callback, state)
{
}
new public static void End(IAsyncResult result)
{
AsyncResult.End(result);
}
}
protected sealed class OutputChannelSendAsyncResult : ApplySecurityAndSendAsyncResult
{
public OutputChannelSendAsyncResult(Message message, SecurityProtocol binding, IOutputChannel channel, TimeSpan timeout,
AsyncCallback callback, object state)
: base(binding, channel, timeout, callback, state)
{
this.Begin(message, null);
}
protected override IAsyncResult BeginSendCore(IOutputChannel channel, Message message, TimeSpan timeout, AsyncCallback callback, object state)
{
return channel.BeginSend(message, timeout, callback, state);
}
internal static void End(IAsyncResult result)
{
OutputChannelSendAsyncResult self = result as OutputChannelSendAsyncResult;
OnEnd(self);
}
protected override void EndSendCore(IOutputChannel channel, IAsyncResult result)
{
channel.EndSend(result);
}
protected override void OnSendCompleteCore(TimeSpan timeout)
{
}
}
}
}
// 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
- RelativeSource.cs
- XmlC14NWriter.cs
- Variable.cs
- CapiHashAlgorithm.cs
- FlowDocumentFormatter.cs
- StorageEndPropertyMapping.cs
- DbSetClause.cs
- DependencyPropertyKey.cs
- ForeignKeyFactory.cs
- Brushes.cs
- IdleTimeoutMonitor.cs
- AbstractSvcMapFileLoader.cs
- cookieexception.cs
- FixedPage.cs
- EditorZoneBase.cs
- InteropTrackingRecord.cs
- DataGrid.cs
- LocalBuilder.cs
- LoginName.cs
- AnchoredBlock.cs
- MarkupProperty.cs
- SafeFindHandle.cs
- Int16Animation.cs
- PathSegmentCollection.cs
- CodeTypeDelegate.cs
- FontDialog.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- HtmlGenericControl.cs
- LocationSectionRecord.cs
- BaseCodeDomTreeGenerator.cs
- OutOfProcStateClientManager.cs
- ImageKeyConverter.cs
- UTF8Encoding.cs
- StickyNote.cs
- PageThemeBuildProvider.cs
- ListViewItemMouseHoverEvent.cs
- coordinatorfactory.cs
- FullTextState.cs
- SizeAnimation.cs
- XPathNodePointer.cs
- CommandLibraryHelper.cs
- RegistryKey.cs
- InstanceNotReadyException.cs
- QilReplaceVisitor.cs
- NamedObject.cs
- LeftCellWrapper.cs
- InputScopeNameConverter.cs
- LineMetrics.cs
- TextTreeRootNode.cs
- DataGridViewRowsRemovedEventArgs.cs
- OdbcConnectionPoolProviderInfo.cs
- MatrixTransform3D.cs
- AtlasWeb.Designer.cs
- RepeatEnumerable.cs
- TrackPoint.cs
- VScrollProperties.cs
- GrammarBuilder.cs
- DataObjectAttribute.cs
- XmlNotation.cs
- ProxyFragment.cs
- EntryPointNotFoundException.cs
- SafeFileHandle.cs
- UniqueIdentifierService.cs
- PasswordBoxAutomationPeer.cs
- PropertyDescriptor.cs
- SimpleMailWebEventProvider.cs
- ScriptIgnoreAttribute.cs
- PrintDialogException.cs
- GridSplitter.cs
- CheckBoxField.cs
- HttpPostedFileBase.cs
- StringFunctions.cs
- hebrewshape.cs
- XamlTreeBuilder.cs
- UnmanagedHandle.cs
- DataGridViewButtonCell.cs
- LineServices.cs
- CompositeControl.cs
- Funcletizer.cs
- XmlQueryRuntime.cs
- RepeaterItem.cs
- QueryOptionExpression.cs
- ZipIORawDataFileBlock.cs
- HtmlTextBoxAdapter.cs
- TraceContextRecord.cs
- SqlCommandBuilder.cs
- Hashtable.cs
- ErasingStroke.cs
- CheckBoxField.cs
- OperationPerformanceCounters.cs
- BindingOperations.cs
- ComContractElement.cs
- PersonalizableAttribute.cs
- NotifyCollectionChangedEventArgs.cs
- InputElement.cs
- Listbox.cs
- ListControlDataBindingHandler.cs
- EditingMode.cs
- StoreContentChangedEventArgs.cs
- GroupLabel.cs