Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / InfocardInteractiveChannelInitializer.cs / 1 / InfocardInteractiveChannelInitializer.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.Security
{
using System.Collections.Generic;
using System.ServiceModel.Channels;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Description;
using System.IdentityModel.Selectors;
using System.IdentityModel.Tokens;
using System.Runtime.Serialization;
using System.ServiceModel.Security;
public class InfocardInteractiveChannelInitializer : IInteractiveChannelInitializer
{
ClientCredentials credentials;
Binding binding;
public InfocardInteractiveChannelInitializer( ClientCredentials credentials, Binding binding )
{
this.credentials = credentials;
this.binding = binding;
}
public Binding Binding
{
get
{
return binding;
}
}
public virtual IAsyncResult BeginDisplayInitializationUI(IClientChannel channel, AsyncCallback callback, object state)
{
return new GetTokenUIAsyncResult(binding, channel, this.credentials, callback, state);
}
public virtual void EndDisplayInitializationUI(IAsyncResult result)
{
GetTokenUIAsyncResult.End(result);
}
}
internal class GetTokenUIAsyncResult :AsyncResult
{
IClientChannel proxy;
ClientCredentials credentials;
Uri relyingPartyIssuer;
bool requiresInfoCard;
Binding binding;
static AsyncCallback callback = DiagnosticUtility.ThunkAsyncCallback(new AsyncCallback(GetTokenUIAsyncResult.Callback));
internal GetTokenUIAsyncResult(Binding binding,
IClientChannel channel,
ClientCredentials credentials,
AsyncCallback callback,
object state)
: base(callback, state)
{
this.credentials = credentials;
this.proxy = channel;
this.binding = binding;
this.CallBegin(true);
}
void CallBegin(bool completedSynchronously)
{
IAsyncResult result = null;
Exception exception = null;
try
{
CardSpacePolicyElement[ ] chain;
SecurityTokenManager tokenManager = credentials.CreateSecurityTokenManager();
requiresInfoCard = InfoCardHelper.IsInfocardRequired(binding, credentials, tokenManager, proxy.RemoteAddress, out chain, out relyingPartyIssuer);
MessageSecurityVersion bindingSecurityVersion = InfoCardHelper.GetBindingSecurityVersionOrDefault(binding);
WSSecurityTokenSerializer tokenSerializer = WSSecurityTokenSerializer.DefaultInstance;
result = credentials.GetInfoCardTokenCallback.BeginInvoke(requiresInfoCard, chain, tokenManager.CreateSecurityTokenSerializer(bindingSecurityVersion.SecurityTokenVersion), callback, this);
}
catch (Exception e)
{
if (DiagnosticUtility.IsFatal(e))
{
throw;
}
exception = e;
}
if (exception == null)
{
if (!result.CompletedSynchronously)
{
return;
}
this.CallEnd(result, out exception);
}
if (exception != null)
{
return;
}
this.CallComplete(completedSynchronously, null);
}
static void Callback(IAsyncResult result)
{
if (result.CompletedSynchronously)
{
return;
}
GetTokenUIAsyncResult outer = (GetTokenUIAsyncResult)result.AsyncState;
Exception exception = null;
outer.CallEnd(result, out exception);
outer.CallComplete(false, exception);
}
void CallEnd(IAsyncResult result, out Exception exception)
{
try
{
SecurityToken token = credentials.GetInfoCardTokenCallback.EndInvoke(result);
ChannelParameterCollection channelParameters =
proxy.GetProperty();
if( null != channelParameters )
{
channelParameters.Add( new InfoCardChannelParameter( token, relyingPartyIssuer, requiresInfoCard ) );
}
exception = null;
}
catch (Exception e)
{
if (DiagnosticUtility.IsFatal(e))
{
throw;
}
exception = e;
}
}
void CallComplete(bool completedSynchronously, Exception exception)
{
this.Complete(completedSynchronously, exception);
}
internal static void End(IAsyncResult result)
{
AsyncResult.End(result);
}
}
}
// 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
- CaseStatement.cs
- ProfessionalColorTable.cs
- WorkflowDesignerMessageFilter.cs
- SQLDateTimeStorage.cs
- FunctionMappingTranslator.cs
- OrderByExpression.cs
- StyleSheetComponentEditor.cs
- BamlLocalizableResource.cs
- EventLogQuery.cs
- SafeSerializationManager.cs
- CallSiteBinder.cs
- Attributes.cs
- Visual.cs
- MatrixTransform.cs
- EntityDataSourceStatementEditorForm.cs
- BamlRecordHelper.cs
- ManagementClass.cs
- DetailsViewRow.cs
- ToolStripPanelRenderEventArgs.cs
- BaseAsyncResult.cs
- XPathBinder.cs
- ResXDataNode.cs
- NetMsmqBinding.cs
- DiagnosticTrace.cs
- BinaryParser.cs
- AVElementHelper.cs
- ObjectViewFactory.cs
- CodeParameterDeclarationExpressionCollection.cs
- WebPartEditorOkVerb.cs
- BindingExpressionBase.cs
- ObjectTypeMapping.cs
- EntityKey.cs
- MILUtilities.cs
- Group.cs
- CheckBoxBaseAdapter.cs
- InputDevice.cs
- AssemblyInfo.cs
- PictureBoxDesigner.cs
- RangeBaseAutomationPeer.cs
- XmlMembersMapping.cs
- ChangeConflicts.cs
- AutomationFocusChangedEventArgs.cs
- Vector.cs
- EnumValidator.cs
- CacheManager.cs
- SplitterCancelEvent.cs
- SessionStateSection.cs
- ListViewItem.cs
- Resources.Designer.cs
- OrderPreservingSpoolingTask.cs
- WinEventQueueItem.cs
- SamlDoNotCacheCondition.cs
- EntityContainerRelationshipSetEnd.cs
- TraceLevelHelper.cs
- BitmapData.cs
- X509Chain.cs
- CodeSnippetExpression.cs
- HashFinalRequest.cs
- InsufficientMemoryException.cs
- OracleConnectionFactory.cs
- RequestTimeoutManager.cs
- PeerNameRegistration.cs
- XmlByteStreamWriter.cs
- VBCodeProvider.cs
- XPathPatternBuilder.cs
- RecognizeCompletedEventArgs.cs
- EncodingStreamWrapper.cs
- StatusInfoItem.cs
- TrackingRecord.cs
- PartitionResolver.cs
- AsymmetricSignatureDeformatter.cs
- RequestValidator.cs
- CodeMemberEvent.cs
- DeobfuscatingStream.cs
- DataGridComboBoxColumn.cs
- WebPartMinimizeVerb.cs
- KeyGestureValueSerializer.cs
- ComplexPropertyEntry.cs
- GetWinFXPath.cs
- _AutoWebProxyScriptEngine.cs
- ProtocolViolationException.cs
- ObjectDisposedException.cs
- EventLogTraceListener.cs
- updateconfighost.cs
- AttributeQuery.cs
- CounterCreationDataCollection.cs
- SafeNativeMethods.cs
- CatalogPartChrome.cs
- SqlMethods.cs
- ConditionCollection.cs
- FileFormatException.cs
- XmlNamespaceDeclarationsAttribute.cs
- WasAdminWrapper.cs
- ExtendedPropertiesHandler.cs
- Encoder.cs
- IdentifierCollection.cs
- IIS7UserPrincipal.cs
- CacheMemory.cs
- _TLSstream.cs
- HMACSHA512.cs